Merge branch 'work.probe_kernel_read' of git://git.kernel.org/pub/scm/linux/kernel...
authorLinus Torvalds <torvalds@linux-foundation.org>
Fri, 7 Jul 2017 05:06:11 +0000 (22:06 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 7 Jul 2017 05:06:11 +0000 (22:06 -0700)
Pull probe_kernel_read() uses from Al Viro:
 "Several open-coded probe_kernel_read()..."

* 'work.probe_kernel_read' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs:
  dio: use probe_kernel_read()
  hp_sdc: use probe_kernel_read()
  hpfb: use probe_kernel_read()

drivers/dio/dio.c
drivers/input/serio/hp_sdc.c
drivers/video/fbdev/hpfb.c

index 8301845291098ded839cffcc75868071070f125a..0d0677f2391633113406de6293164e77d8341b5d 100644 (file)
@@ -116,7 +116,6 @@ int __init dio_find(int deviceid)
         */
        int scode, id;
        u_char prid, secid, i;
-       mm_segment_t fs;
 
        for (scode = 0; scode < DIO_SCMAX; scode++) {
                void *va;
@@ -135,17 +134,12 @@ int __init dio_find(int deviceid)
                else
                        va = ioremap(pa, PAGE_SIZE);
 
-               fs = get_fs();
-               set_fs(KERNEL_DS);
-
-                if (get_user(i, (unsigned char *)va + DIO_IDOFF)) {
-                       set_fs(fs);
+                if (probe_kernel_read(&i, (unsigned char *)va + DIO_IDOFF, 1)) {
                        if (scode >= DIOII_SCBASE)
                                iounmap(va);
                         continue;             /* no board present at that select code */
                }
 
-               set_fs(fs);
                prid = DIO_ID(va);
 
                 if (DIO_NEEDSSECID(prid)) {
@@ -170,7 +164,6 @@ int __init dio_find(int deviceid)
 static int __init dio_init(void)
 {
        int scode;
-       mm_segment_t fs;
        int i;
        struct dio_dev *dev;
        int error;
@@ -214,18 +207,12 @@ static int __init dio_init(void)
                else
                        va = ioremap(pa, PAGE_SIZE);
 
-               fs = get_fs();
-               set_fs(KERNEL_DS);
-
-                if (get_user(i, (unsigned char *)va + DIO_IDOFF)) {
-                       set_fs(fs);
+                if (probe_kernel_read(&i, (unsigned char *)va + DIO_IDOFF, 1)) {
                        if (scode >= DIOII_SCBASE)
                                iounmap(va);
                         continue;              /* no board present at that select code */
                }
 
-               set_fs(fs);
-
                 /* Found a board, allocate it an entry in the list */
                dev = kzalloc(sizeof(struct dio_dev), GFP_KERNEL);
                if (!dev)
index 559c99ca65920fb76ad345a65fac806c0cb84623..1bfdae4b0d99671f9c3f42ad470ddb08b29843d9 100644 (file)
@@ -1001,7 +1001,6 @@ static int __init hp_sdc_register(void)
        uint8_t tq_init_seq[5];
        struct semaphore tq_init_sem;
 #if defined(__mc68000__)
-       mm_segment_t fs;
        unsigned char i;
 #endif
 
@@ -1026,11 +1025,8 @@ static int __init hp_sdc_register(void)
        hp_sdc.base_io   = (unsigned long) 0xf0428000;
        hp_sdc.data_io   = (unsigned long) hp_sdc.base_io + 1;
        hp_sdc.status_io = (unsigned long) hp_sdc.base_io + 3;
-       fs = get_fs();
-       set_fs(KERNEL_DS);
-       if (!get_user(i, (unsigned char *)hp_sdc.data_io))
+       if (!probe_kernel_read(&i, (unsigned char *)hp_sdc.data_io, 1))
                hp_sdc.dev = (void *)1;
-       set_fs(fs);
        hp_sdc.dev_err   = hp_sdc_init();
 #endif
        if (hp_sdc.dev == NULL) {
index 16f16f5e1a4bbc1e7d93d97d4b29b0f0356cb11a..9230db9ea94b7b68ba07251cb48202d1937d9309 100644 (file)
@@ -377,7 +377,6 @@ static struct dio_driver hpfb_driver = {
 int __init hpfb_init(void)
 {
        unsigned int sid;
-       mm_segment_t fs;
        unsigned char i;
        int err;
 
@@ -402,10 +401,7 @@ int __init hpfb_init(void)
        if (err)
                return err;
 
-       fs = get_fs();
-       set_fs(KERNEL_DS);
-       err = get_user(i, (unsigned char *)INTFBVADDR + DIO_IDOFF);
-       set_fs(fs);
+       err = probe_kernel_read(&i, (unsigned char *)INTFBVADDR + DIO_IDOFF, 1);
 
        if (!err && (i == DIO_ID_FBUFFER) && topcat_sid_ok(sid = DIO_SECID(INTFBVADDR))) {
                if (!request_mem_region(INTFBPADDR, DIO_DEVSIZE, "Internal Topcat"))