[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20200419080646.GE12222@lst.de>
Date: Sun, 19 Apr 2020 10:06:46 +0200
From: Christoph Hellwig <hch@....de>
To: Christophe Leroy <christophe.leroy@....fr>
Cc: Christoph Hellwig <hch@....de>,
Andrew Morton <akpm@...ux-foundation.org>,
Alexander Viro <viro@...iv.linux.org.uk>,
Arnd Bergmann <arnd@...db.de>, linux-kernel@...r.kernel.org,
Jeremy Kerr <jk@...abs.org>, linux-fsdevel@...r.kernel.org,
linuxppc-dev@...ts.ozlabs.org,
"Eric W . Biederman" <ebiederm@...ssion.com>
Subject: Re: [PATCH 8/8] exec: open code copy_string_kernel
On Sat, Apr 18, 2020 at 10:15:42AM +0200, Christophe Leroy wrote:
>
>
> Le 14/04/2020 à 09:01, Christoph Hellwig a écrit :
>> Currently copy_string_kernel is just a wrapper around copy_strings that
>> simplifies the calling conventions and uses set_fs to allow passing a
>> kernel pointer. But due to the fact the we only need to handle a single
>> kernel argument pointer, the logic can be sigificantly simplified while
>> getting rid of the set_fs.
>
>
> Instead of duplicating almost identical code, can you write a function that
> takes whether the source is from user or from kernel, then you just do
> things like:
>
> if (from_user)
> len = strnlen_user(str, MAX_ARG_STRLEN);
> else
> len = strnlen(str, MAX_ARG_STRLEN);
>
>
> if (from_user)
> copy_from_user(kaddr+offset, str, bytes_to_copy);
> else
> memcpy(kaddr+offset, str, bytes_to_copy);
We'll need two different str variables then with and without __user
annotations to keep type safety. And introduce a branch-y and unreadable
mess in the exec fast path instead of adding a simple and well understood
function for the kernel case that just deals with the much simpler case
of just copying a single arg vector from a kernel address.
Powered by blists - more mailing lists