NFS - fix potential NULL pointer dereference v2
PATCH 1/1 NFS - fix potential NULL pointer dereference v2
There is possible NULL pointer dereference if kstr[n]dup failed. So fix them for safety.
Signed-off-by Cyrill Gorcunov <[email protected]>
---
Trond, please review ;)
fs/nfs/super.c +16 -0
@@ -1230,6 +1230,8 @@ static int nfs_validate_mount_data(void args->namlen = data->namlen; args->bsize = data->bsize; args->auth_flavors[0 ] = data->pseudoflavor; +if (!args->nfs_server.hostname) + goto out_nomem;/* * The legacy version 6 binary mount data from userspace has a
@@ -1276,6 +1278,8 @@ static int nfs_validate_mount_data(void len = c - dev_name;/* N.B. caller will free nfs_server.hostname in all cases */ args->nfs_server.hostname =kstrndup (dev_name, len,GFP_KERNEL ); +if (!args->nfs_server.hostname) + goto out_nomem; c++;if (strlen (c) >NFS_MAXPATHLEN )
@@ -1319,6 +1323,10 @@ out_v3_not_compiled:return -EPROTONOSUPPORT ;#endif /* !CONFIG_NFS_V3 */ +out_nomem: +dfprintk (MOUNT ,"NFS: not enough memory to handle mount options\n" ); +return -ENOMEM ; + out_no_address:dfprintk (MOUNT ,"NFS: mount program didn't pass remote address\n" );return -EINVAL ;
@@ -1852,12 +1860,16 @@ static int nfs4_validate_mount_data(voidreturn -ENAMETOOLONG ;/* N.B. caller will free nfs_server.hostname in all cases */ args->nfs_server.hostname =kstrndup (dev_name, len,GFP_KERNEL ); +if (!args->nfs_server.hostname) + goto out_nomem; c++;/* step over the ':' */ len =strlen (c);if (len >NFS4_MAXPATHLEN )return -ENAMETOOLONG ; args->nfs_server.export_path =kstrndup (c, len,GFP_KERNEL ); +if (!args->nfs_server.export_path) + goto out_nomem;dprintk ("NFS: MNTPATH: '%s'\n" , args->nfs_server.export_path);
@@ -1879,6 +1891,10 @@ out_inval_auth: data->auth_flavourlen);return -EINVAL ; +out_nomem: +dfprintk (MOUNT ,"NFS4: not enough memory to handle mount options\n" ); +return -ENOMEM ; + out_no_address:dfprintk (MOUNT ,"NFS4: mount program didn't pass remote address\n" );return -EINVAL ;