lkml.org 
[lkml]   [2022]   [Sep]   [26]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.10 125/141] cifs: always initialize struct msghdr smb_msg completely
    Date
    From: Stefan Metzmacher <metze@samba.org>

    [ Upstream commit bedc8f76b3539ac4f952114b316bcc2251e808ce ]

    So far we were just lucky because the uninitialized members
    of struct msghdr are not used by default on a SOCK_STREAM tcp
    socket.

    But as new things like msg_ubuf and sg_from_iter where added
    recently, we should play on the safe side and avoid potention
    problems in future.

    Signed-off-by: Stefan Metzmacher <metze@samba.org>
    Cc: stable@vger.kernel.org
    Reviewed-by: Paulo Alcantara (SUSE) <pc@cjr.nz>
    Reviewed-by: Ronnie Sahlberg <lsahlber@redhat.com>
    Signed-off-by: Steve French <stfrench@microsoft.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    fs/cifs/connect.c | 11 +++--------
    fs/cifs/transport.c | 6 +-----
    2 files changed, 4 insertions(+), 13 deletions(-)

    diff --git a/fs/cifs/connect.c b/fs/cifs/connect.c
    index 6e7d5b9e84b8..d1c3086d7ddd 100644
    --- a/fs/cifs/connect.c
    +++ b/fs/cifs/connect.c
    @@ -695,9 +695,6 @@ cifs_readv_from_socket(struct TCP_Server_Info *server, struct msghdr *smb_msg)
    int length = 0;
    int total_read;

    - smb_msg->msg_control = NULL;
    - smb_msg->msg_controllen = 0;
    -
    for (total_read = 0; msg_data_left(smb_msg); total_read += length) {
    try_to_freeze();

    @@ -748,7 +745,7 @@ int
    cifs_read_from_socket(struct TCP_Server_Info *server, char *buf,
    unsigned int to_read)
    {
    - struct msghdr smb_msg;
    + struct msghdr smb_msg = {};
    struct kvec iov = {.iov_base = buf, .iov_len = to_read};
    iov_iter_kvec(&smb_msg.msg_iter, READ, &iov, 1, to_read);

    @@ -758,15 +755,13 @@ cifs_read_from_socket(struct TCP_Server_Info *server, char *buf,
    ssize_t
    cifs_discard_from_socket(struct TCP_Server_Info *server, size_t to_read)
    {
    - struct msghdr smb_msg;
    + struct msghdr smb_msg = {};

    /*
    * iov_iter_discard already sets smb_msg.type and count and iov_offset
    * and cifs_readv_from_socket sets msg_control and msg_controllen
    * so little to initialize in struct msghdr
    */
    - smb_msg.msg_name = NULL;
    - smb_msg.msg_namelen = 0;
    iov_iter_discard(&smb_msg.msg_iter, READ, to_read);

    return cifs_readv_from_socket(server, &smb_msg);
    @@ -776,7 +771,7 @@ int
    cifs_read_page_from_socket(struct TCP_Server_Info *server, struct page *page,
    unsigned int page_offset, unsigned int to_read)
    {
    - struct msghdr smb_msg;
    + struct msghdr smb_msg = {};
    struct bio_vec bv = {
    .bv_page = page, .bv_len = to_read, .bv_offset = page_offset};
    iov_iter_bvec(&smb_msg.msg_iter, READ, &bv, 1, to_read);
    diff --git a/fs/cifs/transport.c b/fs/cifs/transport.c
    index 383ae8744c33..b137006f0fd2 100644
    --- a/fs/cifs/transport.c
    +++ b/fs/cifs/transport.c
    @@ -209,10 +209,6 @@ smb_send_kvec(struct TCP_Server_Info *server, struct msghdr *smb_msg,

    *sent = 0;

    - smb_msg->msg_name = NULL;
    - smb_msg->msg_namelen = 0;
    - smb_msg->msg_control = NULL;
    - smb_msg->msg_controllen = 0;
    if (server->noblocksnd)
    smb_msg->msg_flags = MSG_DONTWAIT + MSG_NOSIGNAL;
    else
    @@ -324,7 +320,7 @@ __smb_send_rqst(struct TCP_Server_Info *server, int num_rqst,
    sigset_t mask, oldmask;
    size_t total_len = 0, sent, size;
    struct socket *ssocket = server->ssocket;
    - struct msghdr smb_msg;
    + struct msghdr smb_msg = {};
    __be32 rfc1002_marker;

    if (cifs_rdma_enabled(server)) {
    --
    2.35.1


    \
     
     \ /
      Last update: 2022-09-26 13:07    [W:4.134 / U:0.076 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site