vt6656: slightly sanitized reading config
authorAl Viro <viro@zeniv.linux.org.uk>
Sat, 6 Apr 2013 22:00:07 +0000 (18:00 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Tue, 9 Apr 2013 19:16:50 +0000 (15:16 -0400)
Just reading - parsing the results is left alone (and unspeakably
lousy).

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
drivers/staging/vt6656/main_usb.c

index a5063a6f64d9f669e59eb08167a1ef0e93ec277d..457d91c1325d5ec1f4e43c76496bf4cb94962302 100644 (file)
@@ -46,6 +46,7 @@
  */
 #undef __NO_VERSION__
 
+#include <linux/file.h>
 #include "device.h"
 #include "card.h"
 #include "baseband.h"
@@ -1316,53 +1317,29 @@ static int Config_FileGetParameter(unsigned char *string,
 /* if read fails, return NULL, or return data pointer */
 static unsigned char *Config_FileOperation(struct vnt_private *pDevice)
 {
-    unsigned char *config_path = CONFIG_PATH;
-    unsigned char *buffer = NULL;
-    struct file   *filp=NULL;
-    mm_segment_t old_fs = get_fs();
+       unsigned char *buffer = kmalloc(1024, GFP_KERNEL);
+       struct file   *file;
 
-    int result = 0;
-
-    set_fs (KERNEL_DS);
-
-    /* open file */
-      filp = filp_open(config_path, O_RDWR, 0);
-        if (IS_ERR(filp)) {
-            printk("Config_FileOperation file Not exist\n");
-            result=-1;
-             goto error2;
-         }
-
-     if(!(filp->f_op) || !(filp->f_op->read) ||!(filp->f_op->write)) {
-           printk("file %s is not read or writeable?\n",config_path);
-         result = -1;
-         goto error1;
-       }
-
-    buffer = kmalloc(1024, GFP_KERNEL);
-    if(buffer==NULL) {
-      printk("allocate mem for file fail?\n");
-      result = -1;
-      goto error1;
-    }
-
-    if(filp->f_op->read(filp, buffer, 1024, &filp->f_pos)<0) {
-     printk("read file error?\n");
-     result = -1;
-    }
+       if (!buffer) {
+               printk("allocate mem for file fail?\n");
+               return NULL;
+       }
 
-error1:
-  if(filp_close(filp,NULL))
-       printk("Config_FileOperation:close file fail\n");
+       file = filp_open(CONFIG_PATH, O_RDONLY, 0);
+       if (IS_ERR(file)) {
+               kfree(buffer);
+               printk("Config_FileOperation file Not exist\n");
+               return NULL;
+       }
 
-error2:
-  set_fs (old_fs);
+       if (kernel_read(file, 0, buffer, 1024) < 0) {
+               printk("read file error?\n");
+               kfree(buffer);
+               buffer = NULL;
+       }
 
-if(result!=0) {
-    kfree(buffer);
-    buffer=NULL;
-}
-  return buffer;
+       fput(file);
+       return buffer;
 }
 
 /* return --->-1:fail; >=0:successful */