From patchwork Mon Jan 8 21:02:29 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marcelo Ricardo Leitner X-Patchwork-Id: 857127 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="QLWk5NUR"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zFnp525spz9s83 for ; Tue, 9 Jan 2018 08:04:29 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932864AbeAHVE0 (ORCPT ); Mon, 8 Jan 2018 16:04:26 -0500 Received: from mail-qk0-f193.google.com ([209.85.220.193]:39033 "EHLO mail-qk0-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932800AbeAHVEX (ORCPT ); Mon, 8 Jan 2018 16:04:23 -0500 Received: by mail-qk0-f193.google.com with SMTP id r8so11649388qke.6; Mon, 08 Jan 2018 13:04:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=I1U7JEdQeqFOgmqyL3sgzC1/twLck8e/MtpeLNVrYxA=; b=QLWk5NUR/2pfNVo9VTFrykBx3aqUFp52ya8KMBfnSMpJY4CJnggq1lTmOxK6jvlPkt rttzABypH8e2VZU2IUSVN2J2k7gnArHezu/ejTRKvvI3tNKSfdRhrRsVbVdJNbiNQOD4 Wf7TalxSjiYMUjWhzdO0Cv5wvmVmDADSkS4dJeBHubCafnQ7wjl9oHw+tmhhWmXkW1kI 9bPwn/SPCSM21lKHB4ozpLFAui0NryHmmLqI7MD1RO+k5zckcj43KyI2JUlNWUr/HwuU 2HXeogD/AVvXUGuBnkGxjaNUshvi/F7Rh3sLQjeqXxucv1ekOzzprMSPaFLjOrhW1x2s jjTw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=I1U7JEdQeqFOgmqyL3sgzC1/twLck8e/MtpeLNVrYxA=; b=k72hSOMDi5wfcvFJbgy6eAZGIzXfxtdN5dpefjFwjCEgUgyXJEw0amn+snewJCspC3 Vkwv3L5vQhr788Z2TswyCCyEExsx1SKZkGgO3Dpn3DqT9JTpGLGNTF4gugidNyqVZu6Q ioOREVooP/KFAVWSoJ9mMa9v6P3ZC6QOTkpx6aALwGTaiIrA1BsqY2Bq3L/+N5pqRTAn 9t4SMMBiqK1rocovFR0M2w+uAajKGUdrpw0fg9Tc4g/5gbMsr4Pc24DtsBTH9VZqP7wv yKBsL08pwMf5ZUnDNF+meEG/teWLkCAyzt83XUiEsy32RUNoIQft2/5tLwHqSOVP8oMS jWeQ== X-Gm-Message-State: AKwxytfFEIvjFJiQyRs5cT6r1bmbo+R3AkZOTCXyxydxb1jz0AIuf3mI vrLqWZ1fToww+BbmZFkgJn3Ifg== X-Google-Smtp-Source: ACJfBouB8de5A85eI7gnU/H00GzQfnOp0lbdsP8cjPPDxIPuJKC7XQ0y/PmSgr/gv3s8AkIczZ2r3Q== X-Received: by 10.233.223.6 with SMTP id t6mr17857724qkf.31.1515445462276; Mon, 08 Jan 2018 13:04:22 -0800 (PST) Received: from localhost.localdomain.com ([2001:1284:f013:76df:df:1cec:3c74:1215]) by smtp.gmail.com with ESMTPSA id r55sm8248266qta.57.2018.01.08.13.04.20 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 08 Jan 2018 13:04:21 -0800 (PST) From: Marcelo Ricardo Leitner To: netdev@vger.kernel.org Cc: linux-sctp@vger.kernel.org, Neil Horman , Vlad Yasevich , haliu@redhat.com Subject: [PATCH net 3/3] sctp: make use of pre-calculated len Date: Mon, 8 Jan 2018 19:02:29 -0200 Message-Id: X-Mailer: git-send-email 2.14.3 In-Reply-To: References: Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Some sockopt handling functions were calculating the length of the buffer to be written to userspace and then calculating it again when actually writing the buffer, which could lead to some write not using an up-to-date length. This patch updates such places to just make use of the len variable. Also, replace some sizeof(type) to sizeof(var). Signed-off-by: Marcelo Ricardo Leitner --- net/sctp/socket.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/net/sctp/socket.c b/net/sctp/socket.c index 022b94f11fd8ac0d3b839b16dfc14f86abf2324f..9b01e994f66108a12abc31f452482f1de8749d84 100644 --- a/net/sctp/socket.c +++ b/net/sctp/socket.c @@ -5025,7 +5025,7 @@ static int sctp_getsockopt_autoclose(struct sock *sk, int len, char __user *optv len = sizeof(int); if (put_user(len, optlen)) return -EFAULT; - if (copy_to_user(optval, &sctp_sk(sk)->autoclose, sizeof(int))) + if (copy_to_user(optval, &sctp_sk(sk)->autoclose, len)) return -EFAULT; return 0; } @@ -5655,6 +5655,9 @@ static int sctp_getsockopt_local_addrs(struct sock *sk, int len, err = -EFAULT; goto out; } + /* XXX: We should have accounted for sizeof(struct sctp_getaddrs) too, + * but we can't change it anymore. + */ if (put_user(bytes_copied, optlen)) err = -EFAULT; out: @@ -6091,7 +6094,7 @@ static int sctp_getsockopt_maxseg(struct sock *sk, int len, params.assoc_id = 0; } else if (len >= sizeof(struct sctp_assoc_value)) { len = sizeof(struct sctp_assoc_value); - if (copy_from_user(¶ms, optval, sizeof(params))) + if (copy_from_user(¶ms, optval, len)) return -EFAULT; } else return -EINVAL; @@ -6261,7 +6264,9 @@ static int sctp_getsockopt_active_key(struct sock *sk, int len, if (len < sizeof(struct sctp_authkeyid)) return -EINVAL; - if (copy_from_user(&val, optval, sizeof(struct sctp_authkeyid))) + + len = sizeof(struct sctp_authkeyid); + if (copy_from_user(&val, optval, len)) return -EFAULT; asoc = sctp_id2assoc(sk, val.scact_assoc_id); @@ -6273,7 +6278,6 @@ static int sctp_getsockopt_active_key(struct sock *sk, int len, else val.scact_keynumber = ep->active_key_id; - len = sizeof(struct sctp_authkeyid); if (put_user(len, optlen)) return -EFAULT; if (copy_to_user(optval, &val, len)) @@ -6299,7 +6303,7 @@ static int sctp_getsockopt_peer_auth_chunks(struct sock *sk, int len, if (len < sizeof(struct sctp_authchunks)) return -EINVAL; - if (copy_from_user(&val, optval, sizeof(struct sctp_authchunks))) + if (copy_from_user(&val, optval, sizeof(val))) return -EFAULT; to = p->gauth_chunks; @@ -6344,7 +6348,7 @@ static int sctp_getsockopt_local_auth_chunks(struct sock *sk, int len, if (len < sizeof(struct sctp_authchunks)) return -EINVAL; - if (copy_from_user(&val, optval, sizeof(struct sctp_authchunks))) + if (copy_from_user(&val, optval, sizeof(val))) return -EFAULT; to = p->gauth_chunks;