mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-07-05 22:12:16 +00:00
Six small cifs/smb3 fixes, 2 for stable
-----BEGIN PGP SIGNATURE----- iQGzBAABCgAdFiEE6fsu8pdIjtWE/DpLiiy9cAdyT1EFAmFOOyoACgkQiiy9cAdy T1FntAv/YGILEUdiKs364//L15K9rInUKo/FPLAg9THBvG+vGJd6HXD30RZNQBRl 030BPcA3AfchrPPTW2Lf3LyEHYHarRI3RE6E5o0++9XodxmjoukhG0ogUnevLZYl IyQ0VwDBb0BhzY9CQHPc1cqbCqeabGHjF8+aPs2bN1G4wspW4EdUoc6xxZM1xKzi XCbCSgRQKMA4qOsmExX5Jfl3nwjIuiBzcV5HAvn9F6WCdILH9/ltjwXunZBWhI5Z aLRrEpMwFyCrNr3B59XPGmGXe5mw0guQzCZDcgMDHGXIVbY/IRZPTIw0pDJqkwvo XfHljjba9FlYDNxc4fgY1J+ez7zRmS0eJzP2wZw9UkoF0Sb0nYmlZmGPnGADqIJ6 YBH7rKz+L6cVVa+zFRMEWcNguOADzZNMo3xuHriXy5lzKQpgT6dwxN6JUNfhvnfq vHzm8tjaFFlQQ47cmTiW6QDiMcyQtJGvP36v8PvxEilH0KUGozZGrsG69aI+sFoB a9XjbLhT =SK4S -----END PGP SIGNATURE----- Merge tag '5.15-rc2-smb3-fixes' of git://git.samba.org/sfrench/cifs-2.6 Pull cifs fixes from Steve French: "Six small cifs/smb3 fixes, two for stable: - important fix for deferred close (found by a git functional test) related to attribute caching on close. - four (two cosmetic, two more serious) small fixes for problems pointed out by smatch via Dan Carpenter - fix for comment formatting problems pointed out by W=1" * tag '5.15-rc2-smb3-fixes' of git://git.samba.org/sfrench/cifs-2.6: cifs: fix incorrect check for null pointer in header_assemble smb3: correct server pointer dereferencing check to be more consistent smb3: correct smb3 ACL security descriptor cifs: Clear modified attribute bit from inode flags cifs: Deal with some warnings from W=1 cifs: fix a sign extension bug
This commit is contained in:
commit
b8f4296560
4 changed files with 21 additions and 9 deletions
|
@ -2389,9 +2389,10 @@ cifs_match_super(struct super_block *sb, void *data)
|
||||||
spin_lock(&cifs_tcp_ses_lock);
|
spin_lock(&cifs_tcp_ses_lock);
|
||||||
cifs_sb = CIFS_SB(sb);
|
cifs_sb = CIFS_SB(sb);
|
||||||
tlink = cifs_get_tlink(cifs_sb_master_tlink(cifs_sb));
|
tlink = cifs_get_tlink(cifs_sb_master_tlink(cifs_sb));
|
||||||
if (IS_ERR(tlink)) {
|
if (tlink == NULL) {
|
||||||
|
/* can not match superblock if tlink were ever null */
|
||||||
spin_unlock(&cifs_tcp_ses_lock);
|
spin_unlock(&cifs_tcp_ses_lock);
|
||||||
return rc;
|
return 0;
|
||||||
}
|
}
|
||||||
tcon = tlink_tcon(tlink);
|
tcon = tlink_tcon(tlink);
|
||||||
ses = tcon->ses;
|
ses = tcon->ses;
|
||||||
|
|
|
@ -884,7 +884,7 @@ int cifs_close(struct inode *inode, struct file *file)
|
||||||
cinode->lease_granted &&
|
cinode->lease_granted &&
|
||||||
!test_bit(CIFS_INO_CLOSE_ON_LOCK, &cinode->flags) &&
|
!test_bit(CIFS_INO_CLOSE_ON_LOCK, &cinode->flags) &&
|
||||||
dclose) {
|
dclose) {
|
||||||
if (test_bit(CIFS_INO_MODIFIED_ATTR, &cinode->flags)) {
|
if (test_and_clear_bit(CIFS_INO_MODIFIED_ATTR, &cinode->flags)) {
|
||||||
inode->i_ctime = inode->i_mtime = current_time(inode);
|
inode->i_ctime = inode->i_mtime = current_time(inode);
|
||||||
cifs_fscache_update_inode_cookie(inode);
|
cifs_fscache_update_inode_cookie(inode);
|
||||||
}
|
}
|
||||||
|
@ -3113,7 +3113,7 @@ static void collect_uncached_write_data(struct cifs_aio_ctx *ctx)
|
||||||
struct cifs_tcon *tcon;
|
struct cifs_tcon *tcon;
|
||||||
struct cifs_sb_info *cifs_sb;
|
struct cifs_sb_info *cifs_sb;
|
||||||
struct dentry *dentry = ctx->cfile->dentry;
|
struct dentry *dentry = ctx->cfile->dentry;
|
||||||
int rc;
|
ssize_t rc;
|
||||||
|
|
||||||
tcon = tlink_tcon(ctx->cfile->tlink);
|
tcon = tlink_tcon(ctx->cfile->tlink);
|
||||||
cifs_sb = CIFS_SB(dentry->d_sb);
|
cifs_sb = CIFS_SB(dentry->d_sb);
|
||||||
|
|
|
@ -264,6 +264,7 @@ header_assemble(struct smb_hdr *buffer, char smb_command /* command */ ,
|
||||||
|
|
||||||
/* Uid is not converted */
|
/* Uid is not converted */
|
||||||
buffer->Uid = treeCon->ses->Suid;
|
buffer->Uid = treeCon->ses->Suid;
|
||||||
|
if (treeCon->ses->server)
|
||||||
buffer->Mid = get_next_mid(treeCon->ses->server);
|
buffer->Mid = get_next_mid(treeCon->ses->server);
|
||||||
}
|
}
|
||||||
if (treeCon->Flags & SMB_SHARE_IS_IN_DFS)
|
if (treeCon->Flags & SMB_SHARE_IS_IN_DFS)
|
||||||
|
@ -590,6 +591,7 @@ void cifs_put_writer(struct cifsInodeInfo *cinode)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* cifs_queue_oplock_break - queue the oplock break handler for cfile
|
* cifs_queue_oplock_break - queue the oplock break handler for cfile
|
||||||
|
* @cfile: The file to break the oplock on
|
||||||
*
|
*
|
||||||
* This function is called from the demultiplex thread when it
|
* This function is called from the demultiplex thread when it
|
||||||
* receives an oplock break for @cfile.
|
* receives an oplock break for @cfile.
|
||||||
|
@ -1065,6 +1067,9 @@ setup_aio_ctx_iter(struct cifs_aio_ctx *ctx, struct iov_iter *iter, int rw)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* cifs_alloc_hash - allocate hash and hash context together
|
* cifs_alloc_hash - allocate hash and hash context together
|
||||||
|
* @name: The name of the crypto hash algo
|
||||||
|
* @shash: Where to put the pointer to the hash algo
|
||||||
|
* @sdesc: Where to put the pointer to the hash descriptor
|
||||||
*
|
*
|
||||||
* The caller has to make sure @sdesc is initialized to either NULL or
|
* The caller has to make sure @sdesc is initialized to either NULL or
|
||||||
* a valid context. Both can be freed via cifs_free_hash().
|
* a valid context. Both can be freed via cifs_free_hash().
|
||||||
|
@ -1103,6 +1108,8 @@ cifs_alloc_hash(const char *name,
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* cifs_free_hash - free hash and hash context together
|
* cifs_free_hash - free hash and hash context together
|
||||||
|
* @shash: Where to find the pointer to the hash algo
|
||||||
|
* @sdesc: Where to find the pointer to the hash descriptor
|
||||||
*
|
*
|
||||||
* Freeing a NULL hash or context is safe.
|
* Freeing a NULL hash or context is safe.
|
||||||
*/
|
*/
|
||||||
|
@ -1118,8 +1125,10 @@ cifs_free_hash(struct crypto_shash **shash, struct sdesc **sdesc)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* rqst_page_get_length - obtain the length and offset for a page in smb_rqst
|
* rqst_page_get_length - obtain the length and offset for a page in smb_rqst
|
||||||
* Input: rqst - a smb_rqst, page - a page index for rqst
|
* @rqst: The request descriptor
|
||||||
* Output: *len - the length for this page, *offset - the offset for this page
|
* @page: The index of the page to query
|
||||||
|
* @len: Where to store the length for this page:
|
||||||
|
* @offset: Where to store the offset for this page
|
||||||
*/
|
*/
|
||||||
void rqst_page_get_length(struct smb_rqst *rqst, unsigned int page,
|
void rqst_page_get_length(struct smb_rqst *rqst, unsigned int page,
|
||||||
unsigned int *len, unsigned int *offset)
|
unsigned int *len, unsigned int *offset)
|
||||||
|
@ -1152,6 +1161,8 @@ void extract_unc_hostname(const char *unc, const char **h, size_t *len)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* copy_path_name - copy src path to dst, possibly truncating
|
* copy_path_name - copy src path to dst, possibly truncating
|
||||||
|
* @dst: The destination buffer
|
||||||
|
* @src: The source name
|
||||||
*
|
*
|
||||||
* returns number of bytes written (including trailing nul)
|
* returns number of bytes written (including trailing nul)
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -2397,7 +2397,7 @@ create_sd_buf(umode_t mode, bool set_owner, unsigned int *len)
|
||||||
buf->sd.OffsetDacl = cpu_to_le32(ptr - (__u8 *)&buf->sd);
|
buf->sd.OffsetDacl = cpu_to_le32(ptr - (__u8 *)&buf->sd);
|
||||||
/* Ship the ACL for now. we will copy it into buf later. */
|
/* Ship the ACL for now. we will copy it into buf later. */
|
||||||
aclptr = ptr;
|
aclptr = ptr;
|
||||||
ptr += sizeof(struct cifs_acl);
|
ptr += sizeof(struct smb3_acl);
|
||||||
|
|
||||||
/* create one ACE to hold the mode embedded in reserved special SID */
|
/* create one ACE to hold the mode embedded in reserved special SID */
|
||||||
acelen = setup_special_mode_ACE((struct cifs_ace *)ptr, (__u64)mode);
|
acelen = setup_special_mode_ACE((struct cifs_ace *)ptr, (__u64)mode);
|
||||||
|
@ -2422,7 +2422,7 @@ create_sd_buf(umode_t mode, bool set_owner, unsigned int *len)
|
||||||
acl.AclRevision = ACL_REVISION; /* See 2.4.4.1 of MS-DTYP */
|
acl.AclRevision = ACL_REVISION; /* See 2.4.4.1 of MS-DTYP */
|
||||||
acl.AclSize = cpu_to_le16(acl_size);
|
acl.AclSize = cpu_to_le16(acl_size);
|
||||||
acl.AceCount = cpu_to_le16(ace_count);
|
acl.AceCount = cpu_to_le16(ace_count);
|
||||||
memcpy(aclptr, &acl, sizeof(struct cifs_acl));
|
memcpy(aclptr, &acl, sizeof(struct smb3_acl));
|
||||||
|
|
||||||
buf->ccontext.DataLength = cpu_to_le32(ptr - (__u8 *)&buf->sd);
|
buf->ccontext.DataLength = cpu_to_le32(ptr - (__u8 *)&buf->sd);
|
||||||
*len = roundup(ptr - (__u8 *)buf, 8);
|
*len = roundup(ptr - (__u8 *)buf, 8);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue