浏览代码

[PATCH] cifs: fix rare oops in cifs_close

Protect access to cifs file list in cifs_close path

Signed-off-by: Steve French (sfrench@us.ibm.com)
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Steve French 20 年之前
父节点
当前提交
cbe0476fa6
共有 2 个文件被更改,包括 4 次插入1 次删除
  1. 2 1
      fs/cifs/CHANGES
  2. 2 0
      fs/cifs/file.c

+ 2 - 1
fs/cifs/CHANGES

@@ -6,7 +6,8 @@ Add support for lsattr (getting ext2/ext3/reiserfs attr flags from the server)
 as new protocol extensions. Do not send Get/Set calls for POSIX ACLs
 as new protocol extensions. Do not send Get/Set calls for POSIX ACLs
 unless server explicitly claims to support them in CIFS Unix extensions
 unless server explicitly claims to support them in CIFS Unix extensions
 POSIX ACL capability bit. Fix packet signing when multiuser mounting with
 POSIX ACL capability bit. Fix packet signing when multiuser mounting with
-different users from the same client to the same server.
+different users from the same client to the same server. Fix oops in
+cifs_close.
 
 
 Version 1.31
 Version 1.31
 ------------
 ------------

+ 2 - 0
fs/cifs/file.c

@@ -465,8 +465,10 @@ int cifs_close(struct inode *inode, struct file *file)
 				write_lock(&file->f_owner.lock);
 				write_lock(&file->f_owner.lock);
 			}
 			}
 		}
 		}
+		write_lock(&GlobalSMBSeslock);
 		list_del(&pSMBFile->flist);
 		list_del(&pSMBFile->flist);
 		list_del(&pSMBFile->tlist);
 		list_del(&pSMBFile->tlist);
+		write_unlock(&GlobalSMBSeslock);
 		write_unlock(&file->f_owner.lock);
 		write_unlock(&file->f_owner.lock);
 		kfree(pSMBFile->search_resume_name);
 		kfree(pSMBFile->search_resume_name);
 		kfree(file->private_data);
 		kfree(file->private_data);