From patchwork Sun Apr 21 21:12:54 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alex Elder X-Patchwork-Id: 2469461 Return-Path: X-Original-To: patchwork-ceph-devel@patchwork.kernel.org Delivered-To: patchwork-process-083081@patchwork2.kernel.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by patchwork2.kernel.org (Postfix) with ESMTP id 75031DF230 for ; Sun, 21 Apr 2013 21:12:57 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751528Ab3DUVM4 (ORCPT ); Sun, 21 Apr 2013 17:12:56 -0400 Received: from mail-ia0-f180.google.com ([209.85.210.180]:43626 "EHLO mail-ia0-f180.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751231Ab3DUVM4 (ORCPT ); Sun, 21 Apr 2013 17:12:56 -0400 Received: by mail-ia0-f180.google.com with SMTP id t29so1623066iag.39 for ; Sun, 21 Apr 2013 14:12:56 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=x-received:message-id:date:from:user-agent:mime-version:to:subject :references:in-reply-to:content-type:content-transfer-encoding :x-gm-message-state; bh=DqC4MSQPBtjmC3GF/EyrzW8WT26NUypj4xJmUtUC8LE=; b=HT6+VJf8mZvPPbaqUg9zHleIzq5cAuavIBTLBh6E/I/SGzol03cL2RQmCb7HOGPnmo p8QfOf5xK4GlGB0HQEvpwZUyLvCr4SKAjV/CyLv1vkSwTmGj4rsC09pEEzdh4IyAPF0p lrVrufhKUOr27zsJl5VAOz5rv17ljSYCk42mA9CIqy/aoKszZoSFYCG/lJFY5SoTQkJp zZoUaOyg/bY+v+MHQktppJVLXcdsyAZFsMEjqeABK1JSmN0RQN52ws7T5f5LkB7Cu/SB jWwJduUds07v7K0aoqVvy1kYFrhiCBpBRLaph5lvN/LoMjscyi+reqF3M8pbLduEoKXY eceQ== X-Received: by 10.50.153.76 with SMTP id ve12mr6778052igb.61.1366578775972; Sun, 21 Apr 2013 14:12:55 -0700 (PDT) Received: from [172.22.22.4] (c-71-195-31-37.hsd1.mn.comcast.net. [71.195.31.37]) by mx.google.com with ESMTPS id c14sm14222121ign.2.2013.04.21.14.12.54 (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Sun, 21 Apr 2013 14:12:55 -0700 (PDT) Message-ID: <51745656.60504@inktank.com> Date: Sun, 21 Apr 2013 16:12:54 -0500 From: Alex Elder User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: ceph-devel@vger.kernel.org Subject: [PATCH 1/2] libceph: add signed type limits References: <51745629.7080207@inktank.com> In-Reply-To: <51745629.7080207@inktank.com> X-Gm-Message-State: ALoCoQlAJ2s8fcY0hor/n51zYndVwrwCldidSEfIEvLnusFk93XiUCMIyss4ZVIQ51KOQw22LrBH Sender: ceph-devel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: ceph-devel@vger.kernel.org A ceph timespec contains 32-bit unsigned values for its seconds and nanoseconds components. For a standard timespec, both fields are signed, and the seconds field is almost surely 64 bits. Add some explicit casts so the fact that this conversion is taking place is obvious. Also trip a bug if we ever try to put out of range (negative or too big) values into a ceph timespec. Signed-off-by: Alex Elder --- include/linux/ceph/decode.h | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/include/linux/ceph/decode.h b/include/linux/ceph/decode.h index 9575a52..379f715 100644 --- a/include/linux/ceph/decode.h +++ b/include/linux/ceph/decode.h @@ -154,14 +154,19 @@ bad: static inline void ceph_decode_timespec(struct timespec *ts, const struct ceph_timespec *tv) { - ts->tv_sec = le32_to_cpu(tv->tv_sec); - ts->tv_nsec = le32_to_cpu(tv->tv_nsec); + ts->tv_sec = (__kernel_time_t)le32_to_cpu(tv->tv_sec); + ts->tv_nsec = (long)le32_to_cpu(tv->tv_nsec); } static inline void ceph_encode_timespec(struct ceph_timespec *tv, const struct timespec *ts) { - tv->tv_sec = cpu_to_le32(ts->tv_sec); - tv->tv_nsec = cpu_to_le32(ts->tv_nsec); + BUG_ON(ts->tv_sec < 0); + BUG_ON(ts->tv_sec > (__kernel_time_t)U32_MAX); + BUG_ON(ts->tv_nsec < 0); + BUG_ON(ts->tv_nsec > (long)U32_MAX); + + tv->tv_sec = cpu_to_le32((u32)ts->tv_sec); + tv->tv_nsec = cpu_to_le32((u32)ts->tv_nsec); } /*