From patchwork Thu Mar 1 15:05:09 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Xin Long X-Patchwork-Id: 879898 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; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="r2hWapRs"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zsbMw58NQz9s1t for ; Fri, 2 Mar 2018 02:05:32 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1031681AbeCAPF3 (ORCPT ); Thu, 1 Mar 2018 10:05:29 -0500 Received: from mail-pg0-f47.google.com ([74.125.83.47]:37849 "EHLO mail-pg0-f47.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1031554AbeCAPF1 (ORCPT ); Thu, 1 Mar 2018 10:05:27 -0500 Received: by mail-pg0-f47.google.com with SMTP id y26so2410965pgv.4; Thu, 01 Mar 2018 07:05:27 -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; bh=jI4QdSkUIjksr4EmXn5wRkVK3P8urKflZYndqRrqGQM=; b=r2hWapRsHswa/DZWJsmbqmpTDLA/+ekT6hcVK5wC0Kb703UW1XsHwIUKG50onNxFdN q1dvYZxHe9j54rZM9PXErSP13EGvtJTuEMGkyHRXivtIdZuudczqPqiBclWmH3QI0LfQ i2iCCfsI83cqJA2ALXjEreElZnRKFGe8o3W+3e7tgaE6YEyBaILuZixbH9s54bPNWxP0 P0sLBSw94K43qFB1obCigPwUqg2eLhMyCrDhw43a4rbDWVIOKQgP4l1Jd6GHGSMYglxC 38onXp4pcIuVXAjvYr26b6i0K6KaqxWE805M7Y5GBKvj51wTVHbps/yNAjAkOm0jNmjB SuXA== 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; bh=jI4QdSkUIjksr4EmXn5wRkVK3P8urKflZYndqRrqGQM=; b=N8kmg/wsgh5af+Rk0r4BQtI3SjgECtLSKM50m75atTy1Xle4E78FzkVr+hB/R2AdYN rLMfABvFxFRFR7P+YxFU6IoSBysmr4kWg96vEhnIaYyNYq3++CcA0zBVKs6m70betRpr Tr5RomYHTzHcbrgu91IRHunkdvsasxYFlzwXduxWdGfMAGJHVP64YugCFPyMf7wEwr1q X58wzT6cIYyiYuR+eL+8WUPeDUWF4YQ4eLKV6Uj7A341k9AoGWv80e45qEDhuCemqHZU lD/iRRn9gHa+ZAKexkoe5ksxPSjixhhIKdMyd4wde7Cm4gCAFS/rmyJFX/LJvZRIz/eJ N7pA== X-Gm-Message-State: APf1xPDK9xB/anMeF2GXRCJr8Pq8HdfkDWxZx4dKKHG3/ixQzK3NI6Zn G27BADHRwHbfLf5JeglSaDE6AkU3 X-Google-Smtp-Source: AG47ELtzuAChQHGS2gkOO6SPws0Rl7k3p7nwy4tOkl7ZTwvMFFgADjdfjEEeALiW0fKtsgSNVaelww== X-Received: by 10.98.9.130 with SMTP id 2mr2246693pfj.149.1519916727124; Thu, 01 Mar 2018 07:05:27 -0800 (PST) Received: from localhost ([209.132.188.80]) by smtp.gmail.com with ESMTPSA id h15sm8681270pfi.56.2018.03.01.07.05.25 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 01 Mar 2018 07:05:26 -0800 (PST) From: Xin Long To: network dev , linux-sctp@vger.kernel.org Cc: Marcelo Ricardo Leitner , Neil Horman , davem@davemloft.net Subject: [PATCH net-next 0/9] sctp: clean up sctp_sendmsg Date: Thu, 1 Mar 2018 23:05:09 +0800 Message-Id: X-Mailer: git-send-email 2.1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org This cleanup mostly does three things: - extract some codes into functions to make sendmsg more readable. - tidy up some codes to avoid the unnecessary checks. - adjust some logic so that it will be easier to add the send flags and cmsgs features that I will post after this. To make it easy to review and to check if the code is compatible with before, this patchset is to do it step by step in 9 patches. NOTE: There will be a conflict when merging Commit 2277c7cd75e3 ("sctp: Add LSM hooks") from selinux tree, the solution is to: 1. remove all the lines in [B]: <<<<<<< HEAD [A] ======= [B] >>>>>>> 2277c7c... sctp: Add LSM hooks 2. and apply the following diff-output: Xin Long (9): sctp: factor out sctp_sendmsg_to_asoc from sctp_sendmsg sctp: factor out sctp_sendmsg_new_asoc from sctp_sendmsg sctp: factor out sctp_sendmsg_check_sflags from sctp_sendmsg sctp: factor out sctp_sendmsg_get_daddr from sctp_sendmsg sctp: factor out sctp_sendmsg_parse from sctp_sendmsg sctp: factor out sctp_sendmsg_update_sinfo from sctp_sendmsg sctp: remove the unnecessary transport looking up from sctp_sendmsg sctp: improve some variables in sctp_sendmsg sctp: adjust some codes in a better order in sctp_sendmsg net/sctp/socket.c | 638 +++++++++++++++++++++++------------------------------- 1 file changed, 274 insertions(+), 364 deletions(-) Acked-by: Neil Horman diff --git a/net/sctp/socket.c b/net/sctp/socket.c index 980621e..d6803c8 100644 --- a/net/sctp/socket.c +++ b/net/sctp/socket.c @@ -1686,6 +1686,7 @@ static int sctp_sendmsg_new_asoc(struct sock *sk, __u16 sflags, struct net *net = sock_net(sk); struct sctp_association *asoc; enum sctp_scope scope; + struct sctp_af *af; int err = -EINVAL; *tp = NULL; @@ -1711,6 +1712,22 @@ static int sctp_sendmsg_new_asoc(struct sock *sk, __u16 sflags, scope = sctp_scope(daddr); + /* Label connection socket for first association 1-to-many + * style for client sequence socket()->sendmsg(). This + * needs to be done before sctp_assoc_add_peer() as that will + * set up the initial packet that needs to account for any + * security ip options (CIPSO/CALIPSO) added to the packet. + */ + af = sctp_get_af_specific(daddr->sa.sa_family); + if (!af) + return -EINVAL; + + err = security_sctp_bind_connect(sk, SCTP_SENDMSG_CONNECT, + (struct sockaddr *)daddr, + af->sockaddr_len); + if (err < 0) + return err; + asoc = sctp_association_new(ep, sk, scope, GFP_KERNEL); if (!asoc) return -ENOMEM;