mirror of
https://github.com/torvalds/linux.git
synced 2026-05-31 10:33:41 +02:00
smb: client: reduce stack usage in smb_send_rqst()
Clang warns about exceeded stack frame size fs/smb/client/transport.c:420:1: warning: stack frame size (1048) exceeds limit (1024) in 'smb_send_rqst' [-Wframe-larger-than] Fix this by allocating a structure that will hold transform header and compound requests. Signed-off-by: Paulo Alcantara (SUSE) <pc@manguebit.com> Signed-off-by: Steve French <stfrench@microsoft.com>
This commit is contained in:
parent
946ad1b8b1
commit
933148a47c
|
|
@ -416,13 +416,19 @@ __smb_send_rqst(struct TCP_Server_Info *server, int num_rqst,
|
|||
return rc;
|
||||
}
|
||||
|
||||
struct send_req_vars {
|
||||
struct smb2_transform_hdr tr_hdr;
|
||||
struct smb_rqst rqst[MAX_COMPOUND];
|
||||
struct kvec iov;
|
||||
};
|
||||
|
||||
static int
|
||||
smb_send_rqst(struct TCP_Server_Info *server, int num_rqst,
|
||||
struct smb_rqst *rqst, int flags)
|
||||
{
|
||||
struct kvec iov;
|
||||
struct smb2_transform_hdr *tr_hdr;
|
||||
struct smb_rqst cur_rqst[MAX_COMPOUND];
|
||||
struct send_req_vars *vars;
|
||||
struct smb_rqst *cur_rqst;
|
||||
struct kvec *iov;
|
||||
int rc;
|
||||
|
||||
if (!(flags & CIFS_TRANSFORM_REQ))
|
||||
|
|
@ -436,16 +442,15 @@ smb_send_rqst(struct TCP_Server_Info *server, int num_rqst,
|
|||
return -EIO;
|
||||
}
|
||||
|
||||
tr_hdr = kzalloc(sizeof(*tr_hdr), GFP_NOFS);
|
||||
if (!tr_hdr)
|
||||
vars = kzalloc(sizeof(*vars), GFP_NOFS);
|
||||
if (!vars)
|
||||
return -ENOMEM;
|
||||
cur_rqst = vars->rqst;
|
||||
iov = &vars->iov;
|
||||
|
||||
memset(&cur_rqst[0], 0, sizeof(cur_rqst));
|
||||
memset(&iov, 0, sizeof(iov));
|
||||
|
||||
iov.iov_base = tr_hdr;
|
||||
iov.iov_len = sizeof(*tr_hdr);
|
||||
cur_rqst[0].rq_iov = &iov;
|
||||
iov->iov_base = &vars->tr_hdr;
|
||||
iov->iov_len = sizeof(vars->tr_hdr);
|
||||
cur_rqst[0].rq_iov = iov;
|
||||
cur_rqst[0].rq_nvec = 1;
|
||||
|
||||
rc = server->ops->init_transform_rq(server, num_rqst + 1,
|
||||
|
|
@ -456,7 +461,7 @@ smb_send_rqst(struct TCP_Server_Info *server, int num_rqst,
|
|||
rc = __smb_send_rqst(server, num_rqst + 1, &cur_rqst[0]);
|
||||
smb3_free_compound_rqst(num_rqst, &cur_rqst[1]);
|
||||
out:
|
||||
kfree(tr_hdr);
|
||||
kfree(vars);
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user