From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.3 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_SANE_1 autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id C2825C3A589 for ; Thu, 15 Aug 2019 17:38:29 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 9CEC22063F for ; Thu, 15 Aug 2019 17:38:29 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732488AbfHORi2 (ORCPT ); Thu, 15 Aug 2019 13:38:28 -0400 Received: from Galois.linutronix.de ([193.142.43.55]:40405 "EHLO Galois.linutronix.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728685AbfHORi2 (ORCPT ); Thu, 15 Aug 2019 13:38:28 -0400 Received: from pd9ef1cb8.dip0.t-ipconnect.de ([217.239.28.184] helo=nanos) by Galois.linutronix.de with esmtpsa (TLS1.2:DHE_RSA_AES_256_CBC_SHA256:256) (Exim 4.80) (envelope-from ) id 1hyJhN-0002YD-Mf; Thu, 15 Aug 2019 19:38:05 +0200 Date: Thu, 15 Aug 2019 19:38:04 +0200 (CEST) From: Thomas Gleixner To: Dmitry Safonov cc: linux-kernel@vger.kernel.org, Dmitry Safonov <0x7f454c46@gmail.com>, Andrei Vagin , Adrian Reber , Andrei Vagin , Andy Lutomirski , Arnd Bergmann , Christian Brauner , Cyrill Gorcunov , "Eric W. Biederman" , "H. Peter Anvin" , Ingo Molnar , Jann Horn , Jeff Dike , Oleg Nesterov , Pavel Emelyanov , Shuah Khan , Vincenzo Frascino , containers@lists.linux-foundation.org, criu@openvz.org, linux-api@vger.kernel.org, x86@kernel.org Subject: Re: [PATCHv6 10/36] kernel: Add do_timens_ktime_to_host() helper In-Reply-To: <20190815163836.2927-11-dima@arista.com> Message-ID: References: <20190815163836.2927-1-dima@arista.com> <20190815163836.2927-11-dima@arista.com> User-Agent: Alpine 2.21 (DEB 202 2017-01-01) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII X-Linutronix-Spam-Score: -1.0 X-Linutronix-Spam-Level: - X-Linutronix-Spam-Status: No , -1.0 points, 5.0 required, ALL_TRUSTED=-1,SHORTCIRCUIT=-0.0001 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, 15 Aug 2019, Dmitry Safonov wrote: > +ktime_t do_timens_ktime_to_host(clockid_t clockid, ktime_t tim, > + struct timens_offsets *ns_offsets) > +{ > + ktime_t offset; > + > + switch (clockid) { > + case CLOCK_MONOTONIC: > + offset = timespec64_to_ktime(ns_offsets->monotonic); > + break; > + case CLOCK_BOOTTIME: > + case CLOCK_BOOTTIME_ALARM: > + offset = timespec64_to_ktime(ns_offsets->boottime); > + break; > + default: > + return tim; > + } > + > + /* > + * Check that @tim value is in [offset, KTIME_MAX + offset] > + * and subtract offset. > + */ > + if (tim < offset) { > + /* > + * User can specify @tim *absolute* value - if it's lesser than > + * the time namespace's offset - it's already expired. > + */ > + tim = 0; > + } else if (KTIME_MAX - tim < -offset) { > + /* > + * User-supplied @tim may be close or even equal KTIME_MAX > + * and time namespace offset can be negative. > + * Let's check (tim - offset) for an overflow. > + * Return KTIME_MAX in such case, as the time value is > + * thousands *years* in future anyway. > + */ > + tim = KTIME_MAX; > + } else { > + tim = ktime_sub(tim, offset); > + } While the overflow check is correct, wouldn't it be more intuitive to do: tim = ktime_sub(tim, offset); if (unlikely(tim > KTIME_MAX)) tim = KTIME_MAX; Thanks, tglx