diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2010-11-09 13:34:48 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-11-09 13:34:48 -0500 |
| commit | f6614b7bb405a9b35dd28baea989a749492c46b2 (patch) | |
| tree | 3a6bc580d98fb191ff44a374b61a3a55641f94ac | |
| parent | 63bfd7384b119409685a17d5c58f0b56e5dc03da (diff) | |
| parent | 3565bd46b1c6a3dbf1f670d3275aa4018a4c65ae (diff) | |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/sfrench/cifs-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/sfrench/cifs-2.6:
cifs: fix a memleak in cifs_setattr_nounix()
cifs: make cifs_ioctl handle NULL filp->private_data correctly
| -rw-r--r-- | fs/cifs/inode.c | 1 | ||||
| -rw-r--r-- | fs/cifs/ioctl.c | 12 |
2 files changed, 10 insertions, 3 deletions
diff --git a/fs/cifs/inode.c b/fs/cifs/inode.c index 39869c3c3efb..ef3a55bf86b6 100644 --- a/fs/cifs/inode.c +++ b/fs/cifs/inode.c | |||
| @@ -2177,7 +2177,6 @@ cifs_setattr_nounix(struct dentry *direntry, struct iattr *attrs) | |||
| 2177 | 2177 | ||
| 2178 | setattr_copy(inode, attrs); | 2178 | setattr_copy(inode, attrs); |
| 2179 | mark_inode_dirty(inode); | 2179 | mark_inode_dirty(inode); |
| 2180 | return 0; | ||
| 2181 | 2180 | ||
| 2182 | cifs_setattr_exit: | 2181 | cifs_setattr_exit: |
| 2183 | kfree(full_path); | 2182 | kfree(full_path); |
diff --git a/fs/cifs/ioctl.c b/fs/cifs/ioctl.c index 2fa22f20cfc5..0c98672d0122 100644 --- a/fs/cifs/ioctl.c +++ b/fs/cifs/ioctl.c | |||
| @@ -38,10 +38,10 @@ long cifs_ioctl(struct file *filep, unsigned int command, unsigned long arg) | |||
| 38 | struct cifs_sb_info *cifs_sb; | 38 | struct cifs_sb_info *cifs_sb; |
| 39 | #ifdef CONFIG_CIFS_POSIX | 39 | #ifdef CONFIG_CIFS_POSIX |
| 40 | struct cifsFileInfo *pSMBFile = filep->private_data; | 40 | struct cifsFileInfo *pSMBFile = filep->private_data; |
| 41 | struct cifsTconInfo *tcon = tlink_tcon(pSMBFile->tlink); | 41 | struct cifsTconInfo *tcon; |
| 42 | __u64 ExtAttrBits = 0; | 42 | __u64 ExtAttrBits = 0; |
| 43 | __u64 ExtAttrMask = 0; | 43 | __u64 ExtAttrMask = 0; |
| 44 | __u64 caps = le64_to_cpu(tcon->fsUnixInfo.Capability); | 44 | __u64 caps; |
| 45 | #endif /* CONFIG_CIFS_POSIX */ | 45 | #endif /* CONFIG_CIFS_POSIX */ |
| 46 | 46 | ||
| 47 | xid = GetXid(); | 47 | xid = GetXid(); |
| @@ -62,6 +62,10 @@ long cifs_ioctl(struct file *filep, unsigned int command, unsigned long arg) | |||
| 62 | break; | 62 | break; |
| 63 | #ifdef CONFIG_CIFS_POSIX | 63 | #ifdef CONFIG_CIFS_POSIX |
| 64 | case FS_IOC_GETFLAGS: | 64 | case FS_IOC_GETFLAGS: |
| 65 | if (pSMBFile == NULL) | ||
| 66 | break; | ||
| 67 | tcon = tlink_tcon(pSMBFile->tlink); | ||
| 68 | caps = le64_to_cpu(tcon->fsUnixInfo.Capability); | ||
| 65 | if (CIFS_UNIX_EXTATTR_CAP & caps) { | 69 | if (CIFS_UNIX_EXTATTR_CAP & caps) { |
| 66 | rc = CIFSGetExtAttr(xid, tcon, pSMBFile->netfid, | 70 | rc = CIFSGetExtAttr(xid, tcon, pSMBFile->netfid, |
| 67 | &ExtAttrBits, &ExtAttrMask); | 71 | &ExtAttrBits, &ExtAttrMask); |
| @@ -73,6 +77,10 @@ long cifs_ioctl(struct file *filep, unsigned int command, unsigned long arg) | |||
| 73 | break; | 77 | break; |
| 74 | 78 | ||
| 75 | case FS_IOC_SETFLAGS: | 79 | case FS_IOC_SETFLAGS: |
| 80 | if (pSMBFile == NULL) | ||
| 81 | break; | ||
| 82 | tcon = tlink_tcon(pSMBFile->tlink); | ||
| 83 | caps = le64_to_cpu(tcon->fsUnixInfo.Capability); | ||
| 76 | if (CIFS_UNIX_EXTATTR_CAP & caps) { | 84 | if (CIFS_UNIX_EXTATTR_CAP & caps) { |
| 77 | if (get_user(ExtAttrBits, (int __user *)arg)) { | 85 | if (get_user(ExtAttrBits, (int __user *)arg)) { |
| 78 | rc = -EFAULT; | 86 | rc = -EFAULT; |
