From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by sourceware.org (Postfix) with ESMTP id 733D4384B070 for ; Fri, 21 May 2021 18:38:05 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 733D4384B070 Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-50-txi4r98MMT6KLKtDVo2xKw-1; Fri, 21 May 2021 14:38:03 -0400 X-MC-Unique: txi4r98MMT6KLKtDVo2xKw-1 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 849EB106BB29; Fri, 21 May 2021 18:38:02 +0000 (UTC) Received: from oldenburg.str.redhat.com (ovpn-113-228.ams2.redhat.com [10.36.113.228]) by smtp.corp.redhat.com (Postfix) with ESMTPS id AACC03CC5; Fri, 21 May 2021 18:38:01 +0000 (UTC) From: Florian Weimer To: Adhemerval Zanella Cc: Adhemerval Zanella via Libc-alpha Subject: Re: [PATCH v2 05/25] linux: Add fallback for 64-bit time_t SO_{RCV, SND}TIMEO References: <20210518205613.1487824-1-adhemerval.zanella@linaro.org> <20210518205613.1487824-6-adhemerval.zanella@linaro.org> <87zgwpsy3q.fsf@oldenburg.str.redhat.com> <6f44ae7d-40d5-3be1-e0ed-6cea4a8e1828@linaro.org> Date: Fri, 21 May 2021 20:37:59 +0200 In-Reply-To: <6f44ae7d-40d5-3be1-e0ed-6cea4a8e1828@linaro.org> (Adhemerval Zanella's message of "Thu, 20 May 2021 15:01:01 -0300") Message-ID: <874kew6igo.fsf@oldenburg.str.redhat.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.2 (gnu/linux) MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain X-Spam-Status: No, score=-6.7 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H4, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org 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: , X-List-Received-Date: Fri, 21 May 2021 18:38:07 -0000 * Adhemerval Zanella: > On 20/05/2021 03:44, Florian Weimer wrote: >> * Adhemerval Zanella via Libc-alpha: >> >>> +#ifndef __ASSUME_TIME64_SYSCALLS >>> +static int >>> +getsockopt32 (int fd, int level, int optname, void *optval, >>> + socklen_t *len) >>> +{ >>> + int r = -1; >>> + >>> + if (level != SOL_SOCKET) >>> + return r; >>> + >>> + switch (optname) >>> + { >>> + case COMPAT_SO_RCVTIMEO_NEW: >>> + case COMPAT_SO_SNDTIMEO_NEW: >>> + { >>> + if (*len < sizeof (struct __timeval64)) >>> + { >>> + __set_errno (EINVAL); >>> + break; >>> + } >>> + >>> + if (optname == COMPAT_SO_RCVTIMEO_NEW) >>> + optname = COMPAT_SO_RCVTIMEO_OLD; >>> + if (optname == COMPAT_SO_SNDTIMEO_NEW) >>> + optname = COMPAT_SO_SNDTIMEO_OLD; >>> + >>> + struct __timeval32 tv32; >>> + r = getsockopt_syscall (fd, level, optname, &tv32, >>> + (socklen_t[]) { sizeof tv32 }); >>> + if (r < 0) >>> + break; >>> + struct __timeval64 *tv64 = (struct __timeval64 *) optval; >>> + *tv64 = valid_timeval32_to_timeval64 (tv32); >>> + *len = sizeof (*tv64); >>> + } >> >> I think POSIX requires checking the incoming *len value and truncating >> the output. > > The kernel will fail with EINVAL if the input argument is smaller than > the expected one, so I think as QoI the truncation here should mean > to return a timeout value clamped to 32 bits (instead of a truncated > memory). Wow, that EINVAL behavior is not POSIX-compliant at all. If the kernel behaves that way, I guess glibc should as well. Thanks, Florian