Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag '6.0-rc5-smb3-fixes' of git://git.samba.org/sfrench/cifs-2.6

Pull cifs fixes from Steve French:
"Four smb3 fixes for stable:

- important fix to revalidate mapping when doing direct writes

- missing spinlock

- two fixes to socket handling

- trivial change to update internal version number for cifs.ko"

* tag '6.0-rc5-smb3-fixes' of git://git.samba.org/sfrench/cifs-2.6:
cifs: update internal module number
cifs: add missing spinlock around tcon refcount
cifs: always initialize struct msghdr smb_msg completely
cifs: don't send down the destination address to sendmsg for a SOCK_STREAM
cifs: revalidate mapping when doing direct writes

+12 -15
+2 -2
fs/cifs/cifsfs.h
··· 153 153 #endif /* CONFIG_CIFS_NFSD_EXPORT */ 154 154 155 155 /* when changing internal version - update following two lines at same time */ 156 - #define SMB3_PRODUCT_BUILD 38 157 - #define CIFS_VERSION "2.38" 156 + #define SMB3_PRODUCT_BUILD 39 157 + #define CIFS_VERSION "2.39" 158 158 #endif /* _CIFSFS_H */
+6 -8
fs/cifs/connect.c
··· 702 702 int length = 0; 703 703 int total_read; 704 704 705 - smb_msg->msg_control = NULL; 706 - smb_msg->msg_controllen = 0; 707 - 708 705 for (total_read = 0; msg_data_left(smb_msg); total_read += length) { 709 706 try_to_freeze(); 710 707 ··· 757 760 cifs_read_from_socket(struct TCP_Server_Info *server, char *buf, 758 761 unsigned int to_read) 759 762 { 760 - struct msghdr smb_msg; 763 + struct msghdr smb_msg = {}; 761 764 struct kvec iov = {.iov_base = buf, .iov_len = to_read}; 762 765 iov_iter_kvec(&smb_msg.msg_iter, READ, &iov, 1, to_read); 763 766 ··· 767 770 ssize_t 768 771 cifs_discard_from_socket(struct TCP_Server_Info *server, size_t to_read) 769 772 { 770 - struct msghdr smb_msg; 773 + struct msghdr smb_msg = {}; 771 774 772 775 /* 773 776 * iov_iter_discard already sets smb_msg.type and count and iov_offset 774 777 * and cifs_readv_from_socket sets msg_control and msg_controllen 775 778 * so little to initialize in struct msghdr 776 779 */ 777 - smb_msg.msg_name = NULL; 778 - smb_msg.msg_namelen = 0; 779 780 iov_iter_discard(&smb_msg.msg_iter, READ, to_read); 780 781 781 782 return cifs_readv_from_socket(server, &smb_msg); ··· 783 788 cifs_read_page_from_socket(struct TCP_Server_Info *server, struct page *page, 784 789 unsigned int page_offset, unsigned int to_read) 785 790 { 786 - struct msghdr smb_msg; 791 + struct msghdr smb_msg = {}; 787 792 struct bio_vec bv = { 788 793 .bv_page = page, .bv_len = to_read, .bv_offset = page_offset}; 789 794 iov_iter_bvec(&smb_msg.msg_iter, READ, &bv, 1, to_read); ··· 2345 2350 ses = tcon->ses; 2346 2351 cifs_dbg(FYI, "%s: tc_count=%d\n", __func__, tcon->tc_count); 2347 2352 spin_lock(&cifs_tcp_ses_lock); 2353 + spin_lock(&tcon->tc_lock); 2348 2354 if (--tcon->tc_count > 0) { 2355 + spin_unlock(&tcon->tc_lock); 2349 2356 spin_unlock(&cifs_tcp_ses_lock); 2350 2357 return; 2351 2358 } ··· 2356 2359 WARN_ON(tcon->tc_count < 0); 2357 2360 2358 2361 list_del_init(&tcon->tcon_list); 2362 + spin_unlock(&tcon->tc_lock); 2359 2363 spin_unlock(&cifs_tcp_ses_lock); 2360 2364 2361 2365 /* cancel polling of interfaces */
+3
fs/cifs/file.c
··· 3575 3575 3576 3576 ssize_t cifs_direct_writev(struct kiocb *iocb, struct iov_iter *from) 3577 3577 { 3578 + struct file *file = iocb->ki_filp; 3579 + 3580 + cifs_revalidate_mapping(file->f_inode); 3578 3581 return __cifs_writev(iocb, from, true); 3579 3582 } 3580 3583
+1 -5
fs/cifs/transport.c
··· 194 194 195 195 *sent = 0; 196 196 197 - smb_msg->msg_name = (struct sockaddr *) &server->dstaddr; 198 - smb_msg->msg_namelen = sizeof(struct sockaddr); 199 - smb_msg->msg_control = NULL; 200 - smb_msg->msg_controllen = 0; 201 197 if (server->noblocksnd) 202 198 smb_msg->msg_flags = MSG_DONTWAIT + MSG_NOSIGNAL; 203 199 else ··· 305 309 sigset_t mask, oldmask; 306 310 size_t total_len = 0, sent, size; 307 311 struct socket *ssocket = server->ssocket; 308 - struct msghdr smb_msg; 312 + struct msghdr smb_msg = {}; 309 313 __be32 rfc1002_marker; 310 314 311 315 if (cifs_rdma_enabled(server)) {