linux-sctp.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com>
To: David Laight <David.Laight@aculab.com>
Cc: 'Christoph Hellwig' <hch@lst.de>,
	Vlad Yasevich <vyasevich@gmail.com>,
	Neil Horman <nhorman@tuxdriver.com>,
	"David S. Miller" <davem@davemloft.net>,
	Jakub Kicinski <kuba@kernel.org>,
	"linux-sctp@vger.kernel.org" <linux-sctp@vger.kernel.org>,
	"netdev@vger.kernel.org" <netdev@vger.kernel.org>
Subject: Re: do a single memdup_user in sctp_setsockopt
Date: Fri, 22 May 2020 14:36:23 +0000	[thread overview]
Message-ID: <20200522143623.GA386664@localhost.localdomain> (raw)
In-Reply-To: <348217b7a3e14c1fa4868e47362be9c5@AcuMS.aculab.com>

On Fri, May 22, 2020 at 08:02:09AM +0000, David Laight wrote:
> From: Christoph Hellwig
> > Sent: 21 May 2020 18:47
> > based on the review of Davids patch to do something similar I dusted off
> > the series I had started a few days ago to move the memdup_user or
> > copy_from_user from the inidividual sockopts into sctp_setsockopt,
> > which is done with one patch per option, so it might suit Marcelo's
> > taste a bit better.  I did not start any work on getsockopt.
> 
> I'm not sure that 49 patches is actually any easier to review.
> Most of the patches are just repetitions of the same change.
> If they were in different files it might be different.

It's subjective, yes, but we hardly have patches over 5k lines.
In the case here, as changing the functions also requires changing
their call later on the file, it helps to be able to check that is was
properly updated. Ditto for chained functions.

For example, I can spot things like this easier (from
[PATCH 26/49] sctp: pass a kernel pointer to sctp_setsockopt_auth_key)

@@ -3646,7 +3641,6 @@ static int sctp_setsockopt_auth_key(struct sock *sk,
        }

 out:
-       kzfree(authkey);
        return ret;
 }
...
@@ -4771,7 +4765,10 @@ static int sctp_setsockopt(struct sock *sk, int level, int optname,
        }

        release_sock(sk);
-       kfree(kopt);
+       if (optname = SCTP_AUTH_KEY)
+               kzfree(kopt);
+       else
+               kfree(kopt);

 out_nounlock:
        return retval;

these are 1k lines apart.

Yet, your implementation around this is better:

@@ -3733,7 +3624,7 @@ static int sctp_setsockopt_auth_key(struct sock *sk,
        }

 out:
-       kzfree(authkey);
+       memset(authkey, 0, optlen);
        return ret;
 }

so that sctp_setsockopt() doesn't have to handle it specially.

What if you two work on a joint patchset for this? The proposals are
quite close. The differences around the setsockopt handling are
minimal already. It is basically variable naming, indentation and one
or another small change like:

From Christoph's to David's:
@@ -2249,11 +2248,11 @@ static int sctp_setsockopt_autoclose(struct sock *sk, u32 *autoclose,
                return -EOPNOTSUPP;
        if (optlen != sizeof(int))
                return -EINVAL;
-
-       if (*autoclose > net->sctp.max_autoclose)
+
+       sp->autoclose = *optval;
+
+       if (sp->autoclose > net->sctp.max_autoclose)
                sp->autoclose = net->sctp.max_autoclose;
-       else
-               sp->autoclose = *autoclose;

        return 0;
 }

> 
> If you try to do getsockopt() the same way it will be much
> more complicated - you have to know whether the called function
> did the copy_to_user() and then suppress it.

If it is not possible, then the setsockopt one already splited half of
the lines of the patch. :-)

  reply	other threads:[~2020-05-22 14:36 UTC|newest]

Thread overview: 112+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-05-21 17:46 do a single memdup_user in sctp_setsockopt Christoph Hellwig
2020-05-21 17:46 ` [PATCH 01/49] sctp: copy the optval from user space " Christoph Hellwig
2020-05-21 17:46 ` [PATCH 02/49] sctp: pass a kernel pointer to sctp_setsockopt_bindx Christoph Hellwig
2020-05-21 17:46 ` [PATCH 03/49] sctp: pass a kernel pointer to __sctp_setsockopt_connectx Christoph Hellwig
2020-05-21 17:46 ` [PATCH 04/49] sctp: pass a kernel pointer to sctp_setsockopt_disable_fragments Christoph Hellwig
2020-05-21 17:46 ` [PATCH 05/49] sctp: pass a kernel pointer to sctp_setsockopt_events Christoph Hellwig
2020-05-21 17:46 ` [PATCH 06/49] sctp: pass a kernel pointer to sctp_setsockopt_autoclose Christoph Hellwig
2020-05-21 17:46 ` [PATCH 07/49] sctp: pass a kernel pointer to sctp_setsockopt_peer_addr_params Christoph Hellwig
2020-05-21 17:46 ` [PATCH 08/49] sctp: pass a kernel pointer to sctp_setsockopt_delayed_ack Christoph Hellwig
2020-05-21 17:46 ` [PATCH 09/49] sctp: pass a kernel pointer to sctp_setsockopt_partial_delivery_point Christoph Hellwig
2020-05-21 17:46 ` [PATCH 10/49] sctp: pass a kernel pointer to sctp_setsockopt_initmsg Christoph Hellwig
2020-05-21 17:46 ` [PATCH 11/49] sctp: pass a kernel pointer to sctp_setsockopt_default_send_param Christoph Hellwig
2020-05-21 17:46 ` [PATCH 12/49] sctp: pass a kernel pointer to sctp_setsockopt_default_sndinfo Christoph Hellwig
2020-05-21 17:46 ` [PATCH 13/49] sctp: pass a kernel pointer to sctp_setsockopt_primary_addr Christoph Hellwig
2020-05-21 17:46 ` [PATCH 14/49] sctp: pass a kernel pointer to sctp_setsockopt_peer_primary_addr Christoph Hellwig
2020-05-21 17:46 ` [PATCH 15/49] sctp: pass a kernel pointer to sctp_setsockopt_nodelay Christoph Hellwig
2020-05-21 17:46 ` [PATCH 16/49] sctp: pass a kernel pointer to sctp_setsockopt_rtoinfo Christoph Hellwig
2020-05-21 17:46 ` [PATCH 17/49] sctp: pass a kernel pointer to sctp_setsockopt_associnfo Christoph Hellwig
2020-05-21 17:46 ` [PATCH 18/49] sctp: pass a kernel pointer to sctp_setsockopt_mappedv4 Christoph Hellwig
2020-05-21 17:46 ` [PATCH 19/49] sctp: pass a kernel pointer to sctp_setsockopt_maxseg Christoph Hellwig
2020-05-21 17:46 ` [PATCH 20/49] sctp: pass a kernel pointer to sctp_setsockopt_adaptation_layer Christoph Hellwig
2020-05-21 17:46 ` [PATCH 21/49] sctp: pass a kernel pointer to sctp_setsockopt_context Christoph Hellwig
2020-05-21 17:46 ` [PATCH 22/49] sctp: pass a kernel pointer to sctp_setsockopt_fragment_interleave Christoph Hellwig
2020-05-21 17:46 ` [PATCH 23/49] sctp: pass a kernel pointer to sctp_setsockopt_maxburst Christoph Hellwig
2020-05-21 17:46 ` [PATCH 24/49] sctp: pass a kernel pointer to sctp_setsockopt_auth_chunk Christoph Hellwig
2020-05-21 17:47 ` [PATCH 25/49] sctp: pass a kernel pointer to sctp_setsockopt_hmac_ident Christoph Hellwig
2020-05-21 17:47 ` [PATCH 26/49] sctp: pass a kernel pointer to sctp_setsockopt_auth_key Christoph Hellwig
2020-05-21 17:47 ` [PATCH 27/49] sctp: pass a kernel pointer to sctp_setsockopt_active_key Christoph Hellwig
2020-05-21 17:47 ` [PATCH 28/49] sctp: pass a kernel pointer to sctp_setsockopt_del_key Christoph Hellwig
2020-05-21 17:47 ` [PATCH 29/49] sctp: pass a kernel pointer to sctp_setsockopt_deactivate_key Christoph Hellwig
2020-05-21 17:47 ` [PATCH 30/49] sctp: pass a kernel pointer to sctp_setsockopt_auto_asconf Christoph Hellwig
2020-05-21 17:47 ` [PATCH 31/49] sctp: pass a kernel pointer to sctp_setsockopt_paddr_thresholds Christoph Hellwig
2020-05-21 17:47 ` [PATCH 32/49] sctp: pass a kernel pointer to sctp_setsockopt_recvrcvinfo Christoph Hellwig
2020-05-21 17:47 ` [PATCH 33/49] sctp: pass a kernel pointer to sctp_setsockopt_recvnxtinfo Christoph Hellwig
2020-05-21 17:47 ` [PATCH 34/49] sctp: pass a kernel pointer to sctp_setsockopt_pr_supported Christoph Hellwig
2020-05-21 17:47 ` [PATCH 35/49] sctp: pass a kernel pointer to sctp_setsockopt_default_prinfo Christoph Hellwig
2020-05-21 17:47 ` [PATCH 36/49] sctp: pass a kernel pointer to sctp_setsockopt_reconfig_supported Christoph Hellwig
2020-05-21 17:47 ` [PATCH 37/49] sctp: pass a kernel pointer to sctp_setsockopt_enable_strreset Christoph Hellwig
2020-05-21 17:47 ` [PATCH 38/49] sctp: pass a kernel pointer to sctp_setsockopt_reset_streams Christoph Hellwig
2020-05-21 17:47 ` [PATCH 39/49] sctp: pass a kernel pointer to sctp_setsockopt_reset_assoc Christoph Hellwig
2020-05-21 17:47 ` [PATCH 40/49] sctp: pass a kernel pointer to sctp_setsockopt_add_streams Christoph Hellwig
2020-05-21 17:47 ` [PATCH 41/49] sctp: pass a kernel pointer to sctp_setsockopt_scheduler Christoph Hellwig
2020-05-21 17:47 ` [PATCH 42/49] sctp: pass a kernel pointer to sctp_setsockopt_scheduler_value Christoph Hellwig
2020-05-21 17:47 ` [PATCH 43/49] sctp: pass a kernel pointer to sctp_setsockopt_interleaving_supported Christoph Hellwig
2020-05-21 17:47 ` [PATCH 44/49] sctp: pass a kernel pointer to sctp_setsockopt_reuse_port Christoph Hellwig
2020-05-21 17:47 ` [PATCH 45/49] sctp: pass a kernel pointer to sctp_setsockopt_event Christoph Hellwig
2020-05-21 17:47 ` [PATCH 46/49] " Christoph Hellwig
2020-05-21 17:47 ` [PATCH 47/49] sctp: pass a kernel pointer to sctp_setsockopt_auth_supported Christoph Hellwig
2020-05-21 17:47 ` [PATCH 48/49] sctp: pass a kernel pointer to sctp_setsockopt_ecn_supported Christoph Hellwig
2020-05-21 17:47 ` [PATCH 49/49] sctp: pass a kernel pointer to sctp_setsockopt_pf_expose Christoph Hellwig
2020-05-22  8:02 ` do a single memdup_user in sctp_setsockopt David Laight
2020-05-22 14:36   ` Marcelo Ricardo Leitner [this message]
2020-05-22 15:52     ` David Laight
2020-05-23  7:19     ` 'Christoph Hellwig'
2020-05-25 19:37       ` David Laight
2020-05-25 20:59         ` Marcelo Ricardo Leitner
2020-05-25 21:18       ` Marcelo Ricardo Leitner
2020-05-22 23:11 ` David Miller
2020-07-19  7:21 ` do a single memdup_user in sctp_setsockopt v2 Christoph Hellwig
2020-07-19  7:21   ` [PATCH 01/51] sctp: copy the optval from user space in sctp_setsockopt Christoph Hellwig
2020-07-19  7:21   ` [PATCH 02/51] sctp: pass a kernel pointer to sctp_setsockopt_bindx Christoph Hellwig
2020-07-19  7:21   ` [PATCH 03/51] sctp: pass a kernel pointer to __sctp_setsockopt_connectx Christoph Hellwig
2020-07-19  7:21   ` [PATCH 04/51] sctp: pass a kernel pointer to sctp_setsockopt_disable_fragments Christoph Hellwig
2020-07-19  7:21   ` [PATCH 05/51] sctp: pass a kernel pointer to sctp_setsockopt_events Christoph Hellwig
2020-07-19  7:21   ` [PATCH 06/51] sctp: pass a kernel pointer to sctp_setsockopt_autoclose Christoph Hellwig
2020-07-19  7:21   ` [PATCH 07/51] sctp: pass a kernel pointer to sctp_setsockopt_peer_addr_params Christoph Hellwig
2020-07-19  7:21   ` [PATCH 08/51] sctp: pass a kernel pointer to sctp_setsockopt_delayed_ack Christoph Hellwig
2020-07-19  7:21   ` [PATCH 09/51] sctp: pass a kernel pointer to sctp_setsockopt_partial_delivery_point Christoph Hellwig
2020-07-19  7:21   ` [PATCH 10/51] sctp: pass a kernel pointer to sctp_setsockopt_initmsg Christoph Hellwig
2020-07-19  7:21   ` [PATCH 11/51] sctp: pass a kernel pointer to sctp_setsockopt_default_send_param Christoph Hellwig
2020-07-19  7:21   ` [PATCH 12/51] sctp: pass a kernel pointer to sctp_setsockopt_default_sndinfo Christoph Hellwig
2020-07-19  7:21   ` [PATCH 13/51] sctp: pass a kernel pointer to sctp_setsockopt_primary_addr Christoph Hellwig
2020-07-19  7:21   ` [PATCH 14/51] sctp: pass a kernel pointer to sctp_setsockopt_peer_primary_addr Christoph Hellwig
2020-07-19  7:21   ` [PATCH 15/51] sctp: pass a kernel pointer to sctp_setsockopt_nodelay Christoph Hellwig
2020-07-19  7:21   ` [PATCH 16/51] sctp: pass a kernel pointer to sctp_setsockopt_rtoinfo Christoph Hellwig
2020-07-19  7:21   ` [PATCH 17/51] sctp: pass a kernel pointer to sctp_setsockopt_associnfo Christoph Hellwig
2020-07-19  7:21   ` [PATCH 18/51] sctp: pass a kernel pointer to sctp_setsockopt_mappedv4 Christoph Hellwig
2020-07-19  7:21   ` [PATCH 19/51] sctp: pass a kernel pointer to sctp_setsockopt_maxseg Christoph Hellwig
2020-07-19  7:21   ` [PATCH 20/51] sctp: pass a kernel pointer to sctp_setsockopt_adaptation_layer Christoph Hellwig
2020-07-19  7:21   ` [PATCH 21/51] sctp: pass a kernel pointer to sctp_setsockopt_context Christoph Hellwig
2020-07-19  7:21   ` [PATCH 22/51] sctp: pass a kernel pointer to sctp_setsockopt_fragment_interleave Christoph Hellwig
2020-07-19  7:22   ` [PATCH 23/51] sctp: pass a kernel pointer to sctp_setsockopt_maxburst Christoph Hellwig
2020-07-19  7:22   ` [PATCH 24/51] sctp: pass a kernel pointer to sctp_setsockopt_auth_chunk Christoph Hellwig
2020-07-19  7:22   ` [PATCH 25/51] sctp: pass a kernel pointer to sctp_setsockopt_hmac_ident Christoph Hellwig
2020-07-19  7:22   ` [PATCH 26/51] sctp: switch sctp_setsockopt_auth_key to use memzero_explicit Christoph Hellwig
2020-07-19  7:22   ` [PATCH 27/51] sctp: pass a kernel pointer to sctp_setsockopt_auth_key Christoph Hellwig
2020-07-19  7:22   ` [PATCH 28/51] sctp: pass a kernel pointer to sctp_setsockopt_active_key Christoph Hellwig
2020-07-19  7:22   ` [PATCH 29/51] sctp: pass a kernel pointer to sctp_setsockopt_del_key Christoph Hellwig
2020-07-19  7:22   ` [PATCH 30/51] sctp: pass a kernel pointer to sctp_setsockopt_deactivate_key Christoph Hellwig
2020-07-19  7:22   ` [PATCH 31/51] sctp: pass a kernel pointer to sctp_setsockopt_auto_asconf Christoph Hellwig
2020-07-19  7:22   ` [PATCH 32/51] sctp: pass a kernel pointer to sctp_setsockopt_paddr_thresholds Christoph Hellwig
2020-07-19  7:22   ` [PATCH 33/51] sctp: pass a kernel pointer to sctp_setsockopt_recvrcvinfo Christoph Hellwig
2020-07-19  7:22   ` [PATCH 34/51] sctp: pass a kernel pointer to sctp_setsockopt_recvnxtinfo Christoph Hellwig
2020-07-19  7:22   ` [PATCH 35/51] sctp: pass a kernel pointer to sctp_setsockopt_pr_supported Christoph Hellwig
2020-07-19  7:22   ` [PATCH 36/51] sctp: pass a kernel pointer to sctp_setsockopt_default_prinfo Christoph Hellwig
2020-07-19  7:22   ` [PATCH 37/51] sctp: pass a kernel pointer to sctp_setsockopt_reconfig_supported Christoph Hellwig
2020-07-19  7:22   ` [PATCH 38/51] sctp: pass a kernel pointer to sctp_setsockopt_enable_strreset Christoph Hellwig
2020-07-19  7:22   ` [PATCH 39/51] sctp: pass a kernel pointer to sctp_setsockopt_reset_streams Christoph Hellwig
2020-07-19  7:22   ` [PATCH 40/51] sctp: pass a kernel pointer to sctp_setsockopt_reset_assoc Christoph Hellwig
2020-07-19  7:22   ` [PATCH 41/51] sctp: pass a kernel pointer to sctp_setsockopt_add_streams Christoph Hellwig
2020-07-19  7:22   ` [PATCH 42/51] sctp: pass a kernel pointer to sctp_setsockopt_scheduler Christoph Hellwig
2020-07-19  7:22   ` [PATCH 43/51] sctp: pass a kernel pointer to sctp_setsockopt_scheduler_value Christoph Hellwig
2020-07-19  7:22   ` [PATCH 44/51] sctp: pass a kernel pointer to sctp_setsockopt_interleaving_supported Christoph Hellwig
2020-07-19  7:22   ` [PATCH 45/51] sctp: pass a kernel pointer to sctp_setsockopt_reuse_port Christoph Hellwig
2020-07-19  7:22   ` [PATCH 46/51] sctp: pass a kernel pointer to sctp_setsockopt_event Christoph Hellwig
2020-07-19  7:22   ` [PATCH 47/51] " Christoph Hellwig
2020-07-19  7:22   ` [PATCH 48/51] sctp: pass a kernel pointer to sctp_setsockopt_auth_supported Christoph Hellwig
2020-07-19  7:22   ` [PATCH 49/51] sctp: pass a kernel pointer to sctp_setsockopt_ecn_supported Christoph Hellwig
2020-07-19  7:22   ` [PATCH 50/51] sctp: pass a kernel pointer to sctp_setsockopt_pf_expose Christoph Hellwig
2020-07-19  7:22   ` [PATCH 51/51] sctp: remove the out_nounlock label in sctp_setsockopt Christoph Hellwig
2020-07-20  1:27   ` do a single memdup_user in sctp_setsockopt v2 David Miller
2020-07-20 13:08     ` Marcelo Ricardo Leitner

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200522143623.GA386664@localhost.localdomain \
    --to=marcelo.leitner@gmail.com \
    --cc=David.Laight@aculab.com \
    --cc=davem@davemloft.net \
    --cc=hch@lst.de \
    --cc=kuba@kernel.org \
    --cc=linux-sctp@vger.kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=nhorman@tuxdriver.com \
    --cc=vyasevich@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).