Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp2385990pxb; Tue, 23 Feb 2021 06:02:50 -0800 (PST) X-Google-Smtp-Source: ABdhPJx/mZQntz+Qm3CGK7eNhuLc81XObFYYDH1VkNik1OGg4CHRo/TDnMaBIiivuIEuGyTv2dBo X-Received: by 2002:aa7:dc17:: with SMTP id b23mr28680722edu.139.1614088969963; Tue, 23 Feb 2021 06:02:49 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1614088969; cv=none; d=google.com; s=arc-20160816; b=Z9N626sJMRp0deeboox48Fiqp0/7i08sgjGFVXvtkD492PXj0OzkLqrHC4ZlzNY1iZ vrzeFWVqMgixZLVjB3MzuCw2yqa00KVYbG4Sf3Zn9+Cr1KL21u8w2oKGuNcOkN4wXMB2 ZZnNPzvCsd7sMmPKeo7ktcLln6L7MOlXwQZctsiNbe06fBj+ibbiU3rU235AgIz78K7i VwdjLRIUyg0n+QueXOubZjC8Vb/aE8enFOs8dE8ZmsgztAbtFrIFzQAuz67T0S6KYaUH 9umc3aJpuI2J9oLjLIgb12gHWEAWrYFkKFRt4D+ffnOdVVSKkd6lBVmRfG+h7iJpjlT5 tyIA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature:dkim-filter; bh=owZQEXlFIQ33aUPBIXx5P3uyVNGtycyIe/UsLJziBHQ=; b=AHWXaYNWP7O9whNJrl564ihLPv1jQpM7pFt1/0JUZhNqCbteD4BPCasN1fluIeNNZB CgMUoBNspxz9JgBRFljXYEKHu2+PcHQHWTwUDawmU3ZU3aW1P1U1dCNgk7P4wYgwsnf/ ZRb2WulGozGt9/P2UTg8TSTJEgEe8HAM6HvSW605t5PfOUdVNLAJOtkp4fYcwKdThwBs 5PXkePC2680+39iH0YkTHeZtw8eH2pRx0tH+vhkAHhveNo5VR7jeSUSpwnhVlE8VyZ9O 90aZmo9PN5K+01q+yh1lEJQpWuTj2HBhdaMatfmdoBqvI7k7o0WP9udSEKX7qhnhkn5+ mdjQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@nifty.com header.s=dec2015msa header.b="l44/E6+H"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id k16si20165ejd.246.2021.02.23.06.02.20; Tue, 23 Feb 2021 06:02:49 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@nifty.com header.s=dec2015msa header.b="l44/E6+H"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232327AbhBWKI0 (ORCPT + 99 others); Tue, 23 Feb 2021 05:08:26 -0500 Received: from conuserg-08.nifty.com ([210.131.2.75]:45189 "EHLO conuserg-08.nifty.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232221AbhBWKHs (ORCPT ); Tue, 23 Feb 2021 05:07:48 -0500 Received: from oscar.flets-west.jp (softbank126026090165.bbtec.net [126.26.90.165]) (authenticated) by conuserg-08.nifty.com with ESMTP id 11NA6MWu027532; Tue, 23 Feb 2021 19:06:22 +0900 DKIM-Filter: OpenDKIM Filter v2.10.3 conuserg-08.nifty.com 11NA6MWu027532 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nifty.com; s=dec2015msa; t=1614074783; bh=owZQEXlFIQ33aUPBIXx5P3uyVNGtycyIe/UsLJziBHQ=; h=From:To:Cc:Subject:Date:From; b=l44/E6+HFnGiVvw+YJmuspNes+npkA4ClvTaqyrX7X5+RlJjrF9JNVGcVTqSwK+4r rH8iwhSClDlwVh1Qwc/Lo4VLhx9uP3Fg1pYYNoOIwbQVmF1EKOMqcbtaGOIVB99pZm vB8cWFja1r3rzWUXQDxoybw6rE6CkIbBi80fQifB0oYJMgUtaPve4sPmKtqK81aNzi zB0DBNQ1kH3a5HZbuvBhJ+UpTau5yblloiLiviMtSa/anKZdcxKP53yFE79nl/vuEo 99EoCFqOil/yLL64J0bou6fwMlE1fKRP+UB+NDooldit4tKzinjnE0lNPMRWforwAA 0Obx6MXyJ1VEg== X-Nifty-SrcIP: [126.26.90.165] From: Masahiro Yamada To: Andrew Morton Cc: Arnd Bergmann , linux-kernel@vger.kernel.org, Masahiro Yamada , linux-arch@vger.kernel.org Subject: [PATCH] asm-generic/ioctl.h: use BUILD_BUG_ON_ZERO() for type check Date: Tue, 23 Feb 2021 19:06:19 +0900 Message-Id: <20210223100619.798698-1-masahiroy@kernel.org> X-Mailer: git-send-email 2.27.0 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org With the latest sparse, I do not see the error claimed by commit d55875f5d52c ("include/asm-generic/ioctl.h: fix _IOC_TYPECHECK sparse error"). Anyway, using BUILD_BUG_ON_ZERO() is clearer, and we do not need to worry about sparse because BUILD_BUG_ON_ZERO() definition in is a constant zero when __CHECKER__ is defined. Also, remove #ifndef __KERNEL__ from . Signed-off-by: Masahiro Yamada --- include/asm-generic/ioctl.h | 12 ++++-------- include/uapi/asm-generic/ioctl.h | 13 ++++++------- 2 files changed, 10 insertions(+), 15 deletions(-) diff --git a/include/asm-generic/ioctl.h b/include/asm-generic/ioctl.h index 9fda9ed000cd..d5129d70ee1c 100644 --- a/include/asm-generic/ioctl.h +++ b/include/asm-generic/ioctl.h @@ -2,17 +2,13 @@ #ifndef _ASM_GENERIC_IOCTL_H #define _ASM_GENERIC_IOCTL_H +#include #include -#ifdef __CHECKER__ -#define _IOC_TYPECHECK(t) (sizeof(t)) -#else /* provoke compile error for invalid uses of size argument */ -extern unsigned int __invalid_size_argument_for_IOC; +#undef _IOC_TYPECHECK #define _IOC_TYPECHECK(t) \ - ((sizeof(t) == sizeof(t[1]) && \ - sizeof(t) < (1 << _IOC_SIZEBITS)) ? \ - sizeof(t) : __invalid_size_argument_for_IOC) -#endif + BUILD_BUG_ON_ZERO(sizeof(t) != sizeof(t[1]) || \ + sizeof(t) >= (1 << _IOC_SIZEBITS)) #endif /* _ASM_GENERIC_IOCTL_H */ diff --git a/include/uapi/asm-generic/ioctl.h b/include/uapi/asm-generic/ioctl.h index a84f4db8a250..d50bd39ec3e3 100644 --- a/include/uapi/asm-generic/ioctl.h +++ b/include/uapi/asm-generic/ioctl.h @@ -72,9 +72,8 @@ ((nr) << _IOC_NRSHIFT) | \ ((size) << _IOC_SIZESHIFT)) -#ifndef __KERNEL__ -#define _IOC_TYPECHECK(t) (sizeof(t)) -#endif +#define _IOC_TYPECHECK(t) 0 +#define _IOC_SIZE_WITH_TYPECHECK(t) (sizeof(t) + _IOC_TYPECHECK(t)) /* * Used to create numbers. @@ -82,10 +81,10 @@ * NOTE: _IOW means userland is writing and kernel is reading. _IOR * means userland is reading and kernel is writing. */ -#define _IO(type,nr) _IOC(_IOC_NONE,(type),(nr),0) -#define _IOR(type,nr,size) _IOC(_IOC_READ,(type),(nr),(_IOC_TYPECHECK(size))) -#define _IOW(type,nr,size) _IOC(_IOC_WRITE,(type),(nr),(_IOC_TYPECHECK(size))) -#define _IOWR(type,nr,size) _IOC(_IOC_READ|_IOC_WRITE,(type),(nr),(_IOC_TYPECHECK(size))) +#define _IO(type,nr) _IOC(_IOC_NONE, type, nr, 0) +#define _IOR(type,nr,size) _IOC(_IOC_READ, type, nr, _IOC_SIZE_WITH_TYPECHECK(size)) +#define _IOW(type,nr,size) _IOC(_IOC_WRITE, type, nr, _IOC_SIZE_WITH_TYPECHECK(size)) +#define _IOWR(type,nr,size) _IOC(_IOC_READ|_IOC_WRITE, type, nr, _IOC_SIZE_WITH_TYPECHECK(size)) #define _IOR_BAD(type,nr,size) _IOC(_IOC_READ,(type),(nr),sizeof(size)) #define _IOW_BAD(type,nr,size) _IOC(_IOC_WRITE,(type),(nr),sizeof(size)) #define _IOWR_BAD(type,nr,size) _IOC(_IOC_READ|_IOC_WRITE,(type),(nr),sizeof(size)) -- 2.27.0