[cifs:for-next 7/7] fs/cifs/smb2pdu.c:2056 smb311_posix_mkdir() error: uninitialized symbol 'rsp'.
Steve French
smfrench at gmail.com
Fri Jun 22 20:47:41 UTC 2018
I had forgotten to push a one line fix for this we did earlier - I
just merged it with the previous patch and repushed.
On Fri, Jun 22, 2018 at 6:03 AM Dan Carpenter via samba-technical
<samba-technical at lists.samba.org> wrote:
>
> tree: git://git.samba.org/sfrench/cifs-2.6.git for-next
> head: a0b287ee23a7ad77c1222301f7550625ca2e0d3b
> commit: a0b287ee23a7ad77c1222301f7550625ca2e0d3b [7/7] CIFS: fix memory leak and remove dead code
>
> smatch warnings:
> fs/cifs/smb2pdu.c:2056 smb311_posix_mkdir() error: uninitialized symbol 'rsp'.
>
> git remote add cifs git://git.samba.org/sfrench/cifs-2.6.git
> git remote update cifs
> git checkout a0b287ee23a7ad77c1222301f7550625ca2e0d3b
> vim +/rsp +2056 fs/cifs/smb2pdu.c
>
> f0712928 Aurelien Aptel 2017-02-22 1913
> bea851b8 Steve French 2018-06-14 1914 #ifdef CONFIG_CIFS_SMB311
> bea851b8 Steve French 2018-06-14 1915 int smb311_posix_mkdir(const unsigned int xid, struct inode *inode,
> bea851b8 Steve French 2018-06-14 1916 umode_t mode, struct cifs_tcon *tcon,
> bea851b8 Steve French 2018-06-14 1917 const char *full_path,
> bea851b8 Steve French 2018-06-14 1918 struct cifs_sb_info *cifs_sb)
> bea851b8 Steve French 2018-06-14 1919 {
> bea851b8 Steve French 2018-06-14 1920 struct smb_rqst rqst;
> bea851b8 Steve French 2018-06-14 1921 struct smb2_create_req *req;
> bea851b8 Steve French 2018-06-14 1922 struct smb2_create_rsp *rsp;
> bea851b8 Steve French 2018-06-14 1923 struct TCP_Server_Info *server;
> bea851b8 Steve French 2018-06-14 1924 struct cifs_ses *ses = tcon->ses;
> bea851b8 Steve French 2018-06-14 1925 struct kvec iov[3]; /* make sure at least one for each open context */
> bea851b8 Steve French 2018-06-14 1926 struct kvec rsp_iov = {NULL, 0};
> bea851b8 Steve French 2018-06-14 1927 int resp_buftype;
> bea851b8 Steve French 2018-06-14 1928 int uni_path_len;
> bea851b8 Steve French 2018-06-14 1929 __le16 *copy_path = NULL;
> bea851b8 Steve French 2018-06-14 1930 int copy_size;
> bea851b8 Steve French 2018-06-14 1931 int rc = 0;
> bea851b8 Steve French 2018-06-14 1932 unsigned int n_iov = 2;
> bea851b8 Steve French 2018-06-14 1933 __u32 file_attributes = 0;
> bea851b8 Steve French 2018-06-14 1934 char *pc_buf = NULL;
> bea851b8 Steve French 2018-06-14 1935 int flags = 0;
> bea851b8 Steve French 2018-06-14 1936 unsigned int total_len;
> a0b287ee Aurelien Aptel 2018-06-19 1937 __le16 *utf16_path = NULL;
> bea851b8 Steve French 2018-06-14 1938
> bea851b8 Steve French 2018-06-14 1939 cifs_dbg(FYI, "mkdir\n");
> bea851b8 Steve French 2018-06-14 1940
> a0b287ee Aurelien Aptel 2018-06-19 1941 /* resource #1: path allocation */
> a0b287ee Aurelien Aptel 2018-06-19 1942 utf16_path = cifs_convert_path_to_utf16(full_path, cifs_sb);
> a0b287ee Aurelien Aptel 2018-06-19 1943 if (!utf16_path)
> a0b287ee Aurelien Aptel 2018-06-19 1944 return -ENOMEM;
> a0b287ee Aurelien Aptel 2018-06-19 1945
> bea851b8 Steve French 2018-06-14 1946 if (ses && (ses->server))
> bea851b8 Steve French 2018-06-14 1947 server = ses->server;
> a0b287ee Aurelien Aptel 2018-06-19 1948 else {
> a0b287ee Aurelien Aptel 2018-06-19 1949 rc = -EIO;
> a0b287ee Aurelien Aptel 2018-06-19 1950 goto err_free_path;
> a0b287ee Aurelien Aptel 2018-06-19 1951 }
> bea851b8 Steve French 2018-06-14 1952
> a0b287ee Aurelien Aptel 2018-06-19 1953 /* resource #2: request */
> bea851b8 Steve French 2018-06-14 1954 rc = smb2_plain_req_init(SMB2_CREATE, tcon, (void **) &req, &total_len);
> bea851b8 Steve French 2018-06-14 1955 if (rc)
> a0b287ee Aurelien Aptel 2018-06-19 1956 goto err_free_path;
> a0b287ee Aurelien Aptel 2018-06-19 1957
> bea851b8 Steve French 2018-06-14 1958
> bea851b8 Steve French 2018-06-14 1959 if (smb3_encryption_required(tcon))
> bea851b8 Steve French 2018-06-14 1960 flags |= CIFS_TRANSFORM_REQ;
> bea851b8 Steve French 2018-06-14 1961
> bea851b8 Steve French 2018-06-14 1962 req->ImpersonationLevel = IL_IMPERSONATION;
> bea851b8 Steve French 2018-06-14 1963 req->DesiredAccess = cpu_to_le32(FILE_WRITE_ATTRIBUTES);
> bea851b8 Steve French 2018-06-14 1964 /* File attributes ignored on open (used in create though) */
> bea851b8 Steve French 2018-06-14 1965 req->FileAttributes = cpu_to_le32(file_attributes);
> bea851b8 Steve French 2018-06-14 1966 req->ShareAccess = FILE_SHARE_ALL_LE;
> bea851b8 Steve French 2018-06-14 1967 req->CreateDisposition = cpu_to_le32(FILE_CREATE);
> bea851b8 Steve French 2018-06-14 1968 req->CreateOptions = cpu_to_le32(CREATE_NOT_FILE);
> bea851b8 Steve French 2018-06-14 1969
> bea851b8 Steve French 2018-06-14 1970 iov[0].iov_base = (char *)req;
> bea851b8 Steve French 2018-06-14 1971 /* -1 since last byte is buf[0] which is sent below (path) */
> bea851b8 Steve French 2018-06-14 1972 iov[0].iov_len = total_len - 1;
> bea851b8 Steve French 2018-06-14 1973
> bea851b8 Steve French 2018-06-14 1974 req->NameOffset = cpu_to_le16(sizeof(struct smb2_create_req));
> bea851b8 Steve French 2018-06-14 1975
> bea851b8 Steve French 2018-06-14 1976 /* [MS-SMB2] 2.2.13 NameOffset:
> bea851b8 Steve French 2018-06-14 1977 * If SMB2_FLAGS_DFS_OPERATIONS is set in the Flags field of
> bea851b8 Steve French 2018-06-14 1978 * the SMB2 header, the file name includes a prefix that will
> bea851b8 Steve French 2018-06-14 1979 * be processed during DFS name normalization as specified in
> bea851b8 Steve French 2018-06-14 1980 * section 3.3.5.9. Otherwise, the file name is relative to
> bea851b8 Steve French 2018-06-14 1981 * the share that is identified by the TreeId in the SMB2
> bea851b8 Steve French 2018-06-14 1982 * header.
> bea851b8 Steve French 2018-06-14 1983 */
> bea851b8 Steve French 2018-06-14 1984 if (tcon->share_flags & SHI1005_FLAGS_DFS) {
> bea851b8 Steve French 2018-06-14 1985 int name_len;
> bea851b8 Steve French 2018-06-14 1986
> bea851b8 Steve French 2018-06-14 1987 req->sync_hdr.Flags |= SMB2_FLAGS_DFS_OPERATIONS;
> bea851b8 Steve French 2018-06-14 1988 rc = alloc_path_with_tree_prefix(©_path, ©_size,
> bea851b8 Steve French 2018-06-14 1989 &name_len,
> a0b287ee Aurelien Aptel 2018-06-19 1990 tcon->treeName, utf16_path);
> a0b287ee Aurelien Aptel 2018-06-19 1991 if (rc)
> a0b287ee Aurelien Aptel 2018-06-19 1992 goto err_free_req;
> a0b287ee Aurelien Aptel 2018-06-19 1993
> bea851b8 Steve French 2018-06-14 1994 req->NameLength = cpu_to_le16(name_len * 2);
> bea851b8 Steve French 2018-06-14 1995 uni_path_len = copy_size;
> a0b287ee Aurelien Aptel 2018-06-19 1996 /* free before overwriting resource */
> a0b287ee Aurelien Aptel 2018-06-19 1997 kfree(utf16_path);
> a0b287ee Aurelien Aptel 2018-06-19 1998 utf16_path = copy_path;
> bea851b8 Steve French 2018-06-14 1999 } else {
> a0b287ee Aurelien Aptel 2018-06-19 2000 uni_path_len = (2 * UniStrnlen((wchar_t *)utf16_path, PATH_MAX)) + 2;
> bea851b8 Steve French 2018-06-14 2001 /* MUST set path len (NameLength) to 0 opening root of share */
> bea851b8 Steve French 2018-06-14 2002 req->NameLength = cpu_to_le16(uni_path_len - 2);
> bea851b8 Steve French 2018-06-14 2003 if (uni_path_len % 8 != 0) {
> bea851b8 Steve French 2018-06-14 2004 copy_size = roundup(uni_path_len, 8);
> bea851b8 Steve French 2018-06-14 2005 copy_path = kzalloc(copy_size, GFP_KERNEL);
> bea851b8 Steve French 2018-06-14 2006 if (!copy_path) {
> a0b287ee Aurelien Aptel 2018-06-19 2007 rc = -ENOMEM;
> a0b287ee Aurelien Aptel 2018-06-19 2008 goto err_free_req;
> bea851b8 Steve French 2018-06-14 2009 }
> a0b287ee Aurelien Aptel 2018-06-19 2010 memcpy((char *)copy_path, (const char *)utf16_path,
> bea851b8 Steve French 2018-06-14 2011 uni_path_len);
> bea851b8 Steve French 2018-06-14 2012 uni_path_len = copy_size;
> a0b287ee Aurelien Aptel 2018-06-19 2013 /* free before overwriting resource */
> a0b287ee Aurelien Aptel 2018-06-19 2014 kfree(utf16_path);
> a0b287ee Aurelien Aptel 2018-06-19 2015 utf16_path = copy_path;
> bea851b8 Steve French 2018-06-14 2016 }
> bea851b8 Steve French 2018-06-14 2017 }
> bea851b8 Steve French 2018-06-14 2018
> bea851b8 Steve French 2018-06-14 2019 iov[1].iov_len = uni_path_len;
> a0b287ee Aurelien Aptel 2018-06-19 2020 iov[1].iov_base = utf16_path;
> bea851b8 Steve French 2018-06-14 2021 req->RequestedOplockLevel = SMB2_OPLOCK_LEVEL_NONE;
> bea851b8 Steve French 2018-06-14 2022
> bea851b8 Steve French 2018-06-14 2023 if (tcon->posix_extensions) {
> a0b287ee Aurelien Aptel 2018-06-19 2024 /* resource #3: posix buf */
> bea851b8 Steve French 2018-06-14 2025 rc = add_posix_context(iov, &n_iov, mode);
> a0b287ee Aurelien Aptel 2018-06-19 2026 if (rc)
> a0b287ee Aurelien Aptel 2018-06-19 2027 goto err_free_req;
> bea851b8 Steve French 2018-06-14 2028 pc_buf = iov[n_iov-1].iov_base;
> bea851b8 Steve French 2018-06-14 2029 }
> bea851b8 Steve French 2018-06-14 2030
> bea851b8 Steve French 2018-06-14 2031
> bea851b8 Steve French 2018-06-14 2032 memset(&rqst, 0, sizeof(struct smb_rqst));
> bea851b8 Steve French 2018-06-14 2033 rqst.rq_iov = iov;
> bea851b8 Steve French 2018-06-14 2034 rqst.rq_nvec = n_iov;
> bea851b8 Steve French 2018-06-14 2035
> a0b287ee Aurelien Aptel 2018-06-19 2036 /* resource #4: response buffer */
> a0b287ee Aurelien Aptel 2018-06-19 2037 rc = cifs_send_recv(xid, ses, &rqst, &resp_buftype, flags, &rsp_iov);
> a0b287ee Aurelien Aptel 2018-06-19 2038 if (rc) {
> bea851b8 Steve French 2018-06-14 2039 cifs_stats_fail_inc(tcon, SMB2_CREATE_HE);
> bea851b8 Steve French 2018-06-14 2040 trace_smb3_posix_mkdir_err(xid, tcon->tid, ses->Suid,
> a0b287ee Aurelien Aptel 2018-06-19 2041 CREATE_NOT_FILE,
> a0b287ee Aurelien Aptel 2018-06-19 2042 FILE_WRITE_ATTRIBUTES, rc);
> a0b287ee Aurelien Aptel 2018-06-19 2043 goto err_free_rsp_buf;
> ^^^^^^^^^^^^^^^^^^^^^^
> a0b287ee Aurelien Aptel 2018-06-19 2044 }
> a0b287ee Aurelien Aptel 2018-06-19 2045
> a0b287ee Aurelien Aptel 2018-06-19 2046 rsp = (struct smb2_create_rsp *)rsp_iov.iov_base;
> ^^^^^^
> Initialized too late.
>
> bea851b8 Steve French 2018-06-14 2047 trace_smb3_posix_mkdir_done(xid, rsp->PersistentFileId, tcon->tid,
> bea851b8 Steve French 2018-06-14 2048 ses->Suid, CREATE_NOT_FILE,
> bea851b8 Steve French 2018-06-14 2049 FILE_WRITE_ATTRIBUTES);
> bea851b8 Steve French 2018-06-14 2050
> bea851b8 Steve French 2018-06-14 2051 SMB2_close(xid, tcon, rsp->PersistentFileId, rsp->VolatileFileId);
> bea851b8 Steve French 2018-06-14 2052
> bea851b8 Steve French 2018-06-14 2053 /* Eventually save off posix specific response info and timestaps */
> bea851b8 Steve French 2018-06-14 2054
> a0b287ee Aurelien Aptel 2018-06-19 2055 err_free_rsp_buf:
> bea851b8 Steve French 2018-06-14 @2056 free_rsp_buf(resp_buftype, rsp);
> a0b287ee Aurelien Aptel 2018-06-19 2057 kfree(pc_buf);
> a0b287ee Aurelien Aptel 2018-06-19 2058 err_free_req:
> a0b287ee Aurelien Aptel 2018-06-19 2059 cifs_small_buf_release(req);
> a0b287ee Aurelien Aptel 2018-06-19 2060 err_free_path:
> a0b287ee Aurelien Aptel 2018-06-19 2061 kfree(utf16_path);
> bea851b8 Steve French 2018-06-14 2062 return rc;
> bea851b8 Steve French 2018-06-14 2063 }
> bea851b8 Steve French 2018-06-14 2064 #endif /* SMB311 */
> bea851b8 Steve French 2018-06-14 2065
>
> :::::: The code at line 2056 was first introduced by commit
> :::::: bea851b8babe6c87c36e97c9de0dd0bea0dd5802 smb3: Fix mode on mkdir on smb311 mounts
>
> :::::: TO: Steve French <stfrench at microsoft.com>
> :::::: CC: Steve French <stfrench at microsoft.com>
>
> ---
> 0-DAY kernel test infrastructure Open Source Technology Center
> https://lists.01.org/pipermail/kbuild-all Intel Corporation
>
--
Thanks,
Steve
More information about the samba-technical
mailing list