From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from 1wt.eu (ded1.1wt.eu [163.172.96.212]) by smtp.subspace.kernel.org (Postfix) with ESMTP id C2E2C38F83 for ; Thu, 23 Jan 2025 13:16:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=163.172.96.212 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1737638190; cv=none; b=kK4SZDk/o2s2XooPnWLoJVG6/rQ7X2G5CBoCvq3aUFOoCFpf8/DgEPD6U+lq9duqn9OqJLDyzUegYPYpJJRxR9dNeSx8lf6+RoYwuhnenDCwKxT30aUJEnSCT+LN6EBxCuloLgtz1OY3FmL4Bu8Y1k8t2CiixzS0XnP1iXPLXgA= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1737638190; c=relaxed/simple; bh=BmoevHKbGVMwdTRuwtKQWn/Mdyz5nKAdfJPChaaF44I=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=hGdVFO4FJsWiB/yx0RawpBIG/AsY+u2eTx5/EsuqS8yjm//TPybtk2icVKQPNLsY2a2Mv5dve4XklDfGUdx66b4KUNhnHTZjUqUylAAVjwg2ce2JHXJ5M7C1CRSsdGmRXbozskUiQodYa5fEBTEGUeZPUlaAZInPMiwMZf2TZ2o= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=1wt.eu; spf=pass smtp.mailfrom=1wt.eu; arc=none smtp.client-ip=163.172.96.212 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=1wt.eu Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=1wt.eu Received: (from willy@localhost) by pcw.home.local (8.15.2/8.15.2/Submit) id 50NDGPAR009988; Thu, 23 Jan 2025 14:16:25 +0100 Date: Thu, 23 Jan 2025 14:16:25 +0100 From: Willy Tarreau To: Thomas =?iso-8859-1?Q?Wei=DFschuh?= Cc: linux-kernel@vger.kernel.org Subject: Re: [PATCH] tools/nolibc: align signature of ioctl() with POSIX Message-ID: <20250123131625.GD8580@1wt.eu> References: <20250123-nolibc-ioctl-v1-1-93f8bca99de5@weissschuh.net> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20250123-nolibc-ioctl-v1-1-93f8bca99de5@weissschuh.net> User-Agent: Mutt/1.10.1 (2018-07-13) Hi Thomas, On Thu, Jan 23, 2025 at 02:04:29PM +0100, Thomas Weißschuh wrote: > POSIX defines the signature of ioctl() as follows, > to allow passing a pointer or integer without casting: > int ioctl(int fildes, int request, ... /* arg */); > > Nolibc ioctl() expects a pointer, forcing the user to manually cast. > Using va_arg to make the signature more flexible would work but seems to > prevent inlining of the function. Instead use a macro. "fd" and "req" > will still be typechecked through sys_ioctl(). > > Signed-off-by: Thomas Weißschuh > --- > tools/include/nolibc/sys.h | 8 ++------ > 1 file changed, 2 insertions(+), 6 deletions(-) > > diff --git a/tools/include/nolibc/sys.h b/tools/include/nolibc/sys.h > index d4a5c2399a66b200ebf7ab249569cce2285481a5..5cb2c66cc8cccc4d4a1126acfd0b30a6efc886c3 100644 > --- a/tools/include/nolibc/sys.h > +++ b/tools/include/nolibc/sys.h > @@ -532,7 +532,7 @@ uid_t getuid(void) > > > /* > - * int ioctl(int fd, unsigned long req, void *value); > + * int ioctl(int fd, unsigned long req, ... value); > */ > > static __attribute__((unused)) > @@ -541,11 +541,7 @@ int sys_ioctl(int fd, unsigned long req, void *value) > return my_syscall3(__NR_ioctl, fd, req, value); > } > > -static __attribute__((unused)) > -int ioctl(int fd, unsigned long req, void *value) > -{ > - return __sysret(sys_ioctl(fd, req, value)); > -} > +#define ioctl(fd, req, value) __sysret(sys_ioctl(fd, req, (void *)(value))) You risk to get a warning about casting a pointer from an integer of a different size if you pass an int there. I think should should perform a double cast instead: #define ioctl(fd, req, value) __sysret(sys_ioctl(fd, req, (void *)(uintptr_t)(value))) That way any int should cast fine, and pointers should as well. Willy