Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20240601023429.GJ10433@brightrain.aerifal.cx>
Date: Fri, 31 May 2024 22:34:30 -0400
From: Rich Felker <dalias@...c.org>
To: Ismael Luceno <ismael@...ev.co.uk>
Cc: musl@...ts.openwall.com
Subject: Re: [PATCH] ioctl: Fix implicit constant conversion overflow

On Sat, Jun 01, 2024 at 03:03:25AM +0200, Ismael Luceno wrote:
> The last parameter (result of sizeof) to _IOC in _IOR/_IOW/_IOWR causes
> the underlying expression's value to be promoted to size_t. Casting it
> to int resolves the issue.
> 
> Signed-off-by: Ismael Luceno <ismael@...ev.co.uk>
> ---
>  arch/generic/bits/ioctl.h   | 6 +++---
>  arch/mips/bits/ioctl.h      | 6 +++---
>  arch/mipsn32/bits/ioctl.h   | 6 +++---
>  arch/powerpc/bits/ioctl.h   | 6 +++---
>  arch/powerpc64/bits/ioctl.h | 6 +++---
>  arch/sh/bits/ioctl.h        | 6 +++---
>  6 files changed, 18 insertions(+), 18 deletions(-)
> 
> diff --git a/arch/generic/bits/ioctl.h b/arch/generic/bits/ioctl.h
> index 60ae8b850b17..16541d547f68 100644
> --- a/arch/generic/bits/ioctl.h
> +++ b/arch/generic/bits/ioctl.h
> @@ -4,9 +4,9 @@
>  #define _IOC_READ  2U
>  
>  #define _IO(a,b) _IOC(_IOC_NONE,(a),(b),0)
> -#define _IOW(a,b,c) _IOC(_IOC_WRITE,(a),(b),sizeof(c))
> -#define _IOR(a,b,c) _IOC(_IOC_READ,(a),(b),sizeof(c))
> -#define _IOWR(a,b,c) _IOC(_IOC_READ|_IOC_WRITE,(a),(b),sizeof(c))
> +#define _IOW(a,b,c) _IOC(_IOC_WRITE,(a),(b),(int)sizeof(c))
> +#define _IOR(a,b,c) _IOC(_IOC_READ,(a),(b),(int)sizeof(c))
> +#define _IOWR(a,b,c) _IOC(_IOC_READ|_IOC_WRITE,(a),(b),(int)sizeof(c))

I don't see how this helps with the warning you're trying to suppress,
since _IOC_{READ,WRITE} already have unsigned type. If you changed
that, you would then have *real overflows* (undefined behavior)
instead of the well-defined, valid implicit conversions -Werror is
complaining about.

There may be a way to improve on the situation here but it's not so
simple.

Rich

Powered by blists - more mailing lists

Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.