From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on dcvr.yhbt.net X-Spam-Level: X-Spam-Status: No, score=-4.7 required=3.0 tests=AWL,BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,NICE_REPLY_A, SPF_HELO_PASS,SPF_PASS shortcircuit=no autolearn=ham autolearn_force=no version=3.4.2 Received: from sourceware.org (server2.sourceware.org [IPv6:2620:52:3:1:0:246e:9693:128c]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by dcvr.yhbt.net (Postfix) with ESMTPS id 56E381F4B4 for ; Thu, 15 Oct 2020 17:24:34 +0000 (UTC) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 41A713851C22; Thu, 15 Oct 2020 17:24:33 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 41A713851C22 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1602782673; bh=bRH9WM7mvuWT+8kgGTrQDlJ649hacEkRsBxHGv0A8CY=; h=Subject:To:References:Date:In-Reply-To:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To: From; b=CCHwwupOjHzcUdySXvAzVgPyHVRwD93iRJZP4iKnhZL4/+U0bGfoXA7wfpLAm+lLD AQCjdvvIIZhf4JlD9SdJVmpaDcr531Gu+qliSGeQC6YrHfgE/Gf85tMb2R8GQQGjcu RcLb1jL1x5FItEamH56cx2j7DJRrIvOrwTAkMTm4= Received: from mail-qk1-x743.google.com (mail-qk1-x743.google.com [IPv6:2607:f8b0:4864:20::743]) by sourceware.org (Postfix) with ESMTPS id 0331D3857802 for ; Thu, 15 Oct 2020 17:24:31 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 0331D3857802 Received: by mail-qk1-x743.google.com with SMTP id s14so2924204qkg.11 for ; Thu, 15 Oct 2020 10:24:30 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:references:from:autocrypt:message-id :date:user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=bRH9WM7mvuWT+8kgGTrQDlJ649hacEkRsBxHGv0A8CY=; b=X1/mB1SYCp+D/gU4SNX5porP6/Bi2hkmMWdIDQO0FZ9t0w7cmPGZaWk3JcZtNMUgkp Ygxe6b+iZNUp9BzbR35ZdM5h0G7VhO2Fx2jCvHmL4VMhNjWv3L8mbAqmLAfpgRaD/85r KeqXf4kZEMX+46wVYKAgM5jFNeSawuOvwGqCiQbjTbJ6DjBSdavFoEKrA9YsmmTYybQD omt/xj2GLpkRzZ7qrC5hYgDjbvMdsX7QqBHSDte2xE8Z9SeKMCEn+2VaUKryHUV8BWug WVY4g+A6+FaHRVmBFi5Qp9ch1MxG7NfouUJAQhtQtZQsfwFj2ZDnJfU4rHrhaSxR1evR QiHQ== X-Gm-Message-State: AOAM53234Y1Z3KgUlf5G10GYPPAGghQS0NM3GDORX8iy7gXOYX/ZXo0M WpEY42IxDeKwz/gvMQkgWHVM28dPFZGUuQ== X-Google-Smtp-Source: ABdhPJzypvfW0/bEKL2hN44LpKt70anrEuxbFtvPxQcWPI0lIdd/ddbuNIEipne49McllDRNmxvHeQ== X-Received: by 2002:a37:9d84:: with SMTP id g126mr4796573qke.136.1602782670264; Thu, 15 Oct 2020 10:24:30 -0700 (PDT) Received: from [192.168.1.4] ([177.194.48.209]) by smtp.googlemail.com with ESMTPSA id a30sm1419917qtn.55.2020.10.15.10.24.29 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 15 Oct 2020 10:24:29 -0700 (PDT) Subject: Re: [PATCH] IPC_INFO: Cast shmmax and shmall fields to uintptr_t [BZ #26736] To: libc-alpha@sourceware.org References: <20201015151756.514621-1-hjl.tools@gmail.com> Autocrypt: addr=adhemerval.zanella@linaro.org; prefer-encrypt=mutual; keydata= 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 Message-ID: <0ec71544-c340-ef47-89c2-fd5a13eabb30@linaro.org> Date: Thu, 15 Oct 2020 14:24:27 -0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.10.0 MIME-Version: 1.0 In-Reply-To: <20201015151756.514621-1-hjl.tools@gmail.com> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , From: Adhemerval Zanella via Libc-alpha Reply-To: Adhemerval Zanella Errors-To: libc-alpha-bounces@sourceware.org Sender: "Libc-alpha" On 15/10/2020 12:17, H.J. Lu via Libc-alpha wrote: > On x32, the shmctl (IPC_INFO) syscall returns the x86-64 values for > shmmax and shmall. Since x32 is limited to 32-bit address space, > shmmax and shmall should be casted to uintptr_t and shmmax should be > clamped to INT_MAX only if the size of shmmax is the size of int. > --- > sysdeps/unix/sysv/linux/shmctl.c | 20 ++++++++++++++++---- > sysdeps/unix/sysv/linux/tst-sysvshm-linux.c | 3 ++- > 2 files changed, 18 insertions(+), 5 deletions(-) > > diff --git a/sysdeps/unix/sysv/linux/shmctl.c b/sysdeps/unix/sysv/linux/shmctl.c > index 833f013e69..8d34c0e7bf 100644 > --- a/sysdeps/unix/sysv/linux/shmctl.c > +++ b/sysdeps/unix/sysv/linux/shmctl.c > @@ -138,11 +138,11 @@ __shmctl64 (int shmid, int cmd, struct __shmid64_ds *buf) > > switch (cmd) > { > - case IPC_STAT: > - case SHM_STAT: > - case SHM_STAT_ANY: > + case IPC_STAT: > + case SHM_STAT: > + case SHM_STAT_ANY: > #ifdef __ASSUME_SYSVIPC_BROKEN_MODE_T > - arg->shm_perm.mode >>= 16; > + arg->shm_perm.mode >>= 16; > #else > /* Old Linux kernel versions might not clear the mode padding. */ > if (sizeof ((struct shmid_ds){0}.shm_perm.mode) > @@ -153,6 +153,18 @@ __shmctl64 (int shmid, int cmd, struct __shmid64_ds *buf) > #if __IPC_TIME64 > kshmid64_to_shmid64 (arg, buf); > #endif > + break; > + > + case IPC_INFO: > + if (sizeof (((struct shminfo *) 0)->shmmax) > sizeof (uintptr_t)) > + { > + /* Since the address space is limited by the size of uintptr_t, > + cast shmmax and shmall to uintptr_t. */ > + struct shminfo *shminfo_p = (struct shminfo *) arg; > + shminfo_p->shmmax = (uintptr_t) shminfo_p->shmmax; > + shminfo_p->shmall = (uintptr_t) shminfo_p->shmall; > + } > + break; > } > > return ret; > diff --git a/sysdeps/unix/sysv/linux/tst-sysvshm-linux.c b/sysdeps/unix/sysv/linux/tst-sysvshm-linux.c > index 7128ae2e14..abeeb37a78 100644 > --- a/sysdeps/unix/sysv/linux/tst-sysvshm-linux.c > +++ b/sysdeps/unix/sysv/linux/tst-sysvshm-linux.c > @@ -128,7 +128,8 @@ do_test (void) > #if LONG_MAX == INT_MAX > /* Kernel explicit clamp the value for shmmax on compat symbol (32-bit > binaries running on 64-bit kernels). */ > - if (v > INT_MAX) > + if (sizeof (((struct shminfo *) 0)->shmmax) == sizeof (int) > + && v > INT_MAX) > v = INT_MAX; > #endif > tipcinfo.shmmax = v; > This is semantic change of shmctl for x32, which I really do not oppose but I think we should rely on kernel to clamp the value correctly for x32 (the shmctl is already rather complex to handle y2038 safeness). What about changing the testcase to use the expected types for shminfo fields (__syscall_ulong_t instead of unsigned long int) and check for the expected provided kernel value: --- diff --git a/sysdeps/unix/sysv/linux/tst-sysvshm-linux.c b/sysdeps/unix/sysv/linux/tst-sysvshm-linux.c index 7128ae2e14..cb32bd522e 100644 --- a/sysdeps/unix/sysv/linux/tst-sysvshm-linux.c +++ b/sysdeps/unix/sysv/linux/tst-sysvshm-linux.c @@ -54,9 +54,9 @@ do_prepare (int argc, char *argv[]) struct test_shminfo { - unsigned long int shmall; - unsigned long int shmmax; - unsigned long int shmmni; + __syscall_ulong_t shmall; + __syscall_ulong_t shmmax; + __syscall_ulong_t shmmni; }; /* It tries to obtain some system-wide SysV shared memory information from @@ -128,7 +128,8 @@ do_test (void) #if LONG_MAX == INT_MAX /* Kernel explicit clamp the value for shmmax on compat symbol (32-bit binaries running on 64-bit kernels). */ - if (v > INT_MAX) + if (sizeof (__syscall_ulong_t) == sizeof (unsigned long int) + && v > INT_MAX) v = INT_MAX; #endif tipcinfo.shmmax = v;