Received: by 2002:ac0:a874:0:0:0:0:0 with SMTP id c49csp275083ima; Fri, 15 Mar 2019 02:33:20 -0700 (PDT) X-Google-Smtp-Source: APXvYqxa3O/VktIEnNrslmr8uWCzamd16Fl+LG20FHWsz8BQYZAgvl0GtNUfEt4uXCPHPYp9zCw5 X-Received: by 2002:aa7:8841:: with SMTP id k1mr3002085pfo.115.1552642400171; Fri, 15 Mar 2019 02:33:20 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1552642400; cv=none; d=google.com; s=arc-20160816; b=VWAmlQdvrTmOQHinAxqUd9NwAYwWzaG5DsBsLHBpurEAKbbF/mzR/qiYa+U8Nxhcmh 9Wtw+bWw0Ef/B5nVrp3suCIes5j56BOTq3H+GHrt4Ajl1psPrHJgjn2TMFKVlIrLrxK8 CmgIeeH6f3AgMBhkAK3aPaEyJkBGIdgAG3XEl7Tg3jckt31j90YT5AtQPY4lKLbw4Zxu v9MPfP1q6VwiXEv306wd/HthgVeArLz7W+G4kncPcsdriD/zC9TYsfl/VsMKbOSz+mTh MszA8Gy9F3GDms1J5BMzsm5nshBw0Xq7hLtECiVDe932YRBtbKdOfX8u4P4zDbb4G1jf l15Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from; bh=bA8KFdCYZBD+gBfK5UsWHPyOqMKcumRH+pOFMRqSfp0=; b=jo1FmfImpCZoPUACk9i6bkTa2CIJrJWfbptyQjEM4DBc1y/+EO9DdruMcs5Ebqy8Ct /QAzFXG7ADgiePeTJ9ED805nzbG9WfL4WTGkISMFGakUhW6hub9PlUK6DkLHvYfTNCjo u2d0UouM4ZibDiFptNCJ0lNMmTIGbfGfDXyhLReuOQdK7jpiDxQ3T+couaAguv1xUX1c QDC6w5tsUQT5S4zjHb4cu5941ATTgP3Iv1FQYrycbxD7BBoyMBRyJ7F8EWBZ/T6YtDG3 WbpUqImaCxcvQUfLFqY4MOUrhYfYwy2WDxwngzkKxhhwqMauXeK6DjD1yXtAqXinbyaG tLQg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id h85si1551988pfj.88.2019.03.15.02.33.05; Fri, 15 Mar 2019 02:33:20 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728695AbfCOJcQ (ORCPT + 99 others); Fri, 15 Mar 2019 05:32:16 -0400 Received: from alexa-out-blr-02.qualcomm.com ([103.229.18.198]:15474 "EHLO alexa-out-blr.qualcomm.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1727242AbfCOJcQ (ORCPT ); Fri, 15 Mar 2019 05:32:16 -0400 X-Greylist: delayed 377 seconds by postgrey-1.27 at vger.kernel.org; Fri, 15 Mar 2019 05:32:15 EDT X-IronPort-AV: E=Sophos;i="5.58,481,1544466600"; d="scan'208";a="381264" Received: from ironmsg02-blr.qualcomm.com ([10.86.208.131]) by alexa-out-blr.qualcomm.com with ESMTP/TLS/AES256-SHA; 15 Mar 2019 14:55:57 +0530 X-IronPort-AV: E=McAfee;i="5900,7806,9195"; a="7162626" Received: from gkohli-linux.qualcomm.com ([10.204.78.26]) by ironmsg02-blr.qualcomm.com with ESMTP; 15 Mar 2019 14:55:56 +0530 Received: by gkohli-linux.qualcomm.com (Postfix, from userid 427023) id 71F453A08; Fri, 15 Mar 2019 14:55:55 +0530 (IST) From: Gaurav Kohli To: srinivas.kandagatla@linaro.org, linux-kernel@vger.kernel.org Cc: linux-arm-msm@vger.kernel.org, Gaurav Kohli Subject: [PATCH] nvmem: core: Set no-read-write provider to avoid userspace read/write Date: Fri, 15 Mar 2019 14:55:37 +0530 Message-Id: <1552641937-19444-1-git-send-email-gkohli@codeaurora.org> X-Mailer: git-send-email 1.9.1 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Current nvmem framework allows user space to read all register space populated by nvmem binary file, In case we don't want to expose value of registers to userspace and only want kernel space to read cell value from nvmem_cell_read_u32. To protect the same, Add no-read-write property to prevent read from userspace. Signed-off-by: Gaurav Kohli diff --git a/drivers/nvmem/core.c b/drivers/nvmem/core.c index f24008b..edd0e9f 100644 --- a/drivers/nvmem/core.c +++ b/drivers/nvmem/core.c @@ -27,6 +27,7 @@ struct nvmem_device { struct kref refcnt; size_t size; bool read_only; + bool no_read_write; int flags; enum nvmem_type type; struct bin_attribute eeprom; @@ -120,6 +121,9 @@ static ssize_t bin_attr_nvmem_read(struct file *filp, struct kobject *kobj, dev = container_of(kobj, struct device, kobj); nvmem = to_nvmem_device(dev); + /* if no-read-write, then stop from reading */ + if (nvmem->no_read_write) + return -EPERM; /* Stop the user from reading */ if (pos >= nvmem->size) return 0; @@ -154,6 +158,10 @@ static ssize_t bin_attr_nvmem_write(struct file *filp, struct kobject *kobj, dev = container_of(kobj, struct device, kobj); nvmem = to_nvmem_device(dev); + /* if no-read-write, then stop from writing */ + if (nvmem->no_read_write) + return -EPERM; + /* Stop the user from writing */ if (pos >= nvmem->size) return -EFBIG; @@ -651,6 +659,8 @@ struct nvmem_device *nvmem_register(const struct nvmem_config *config) nvmem->read_only = device_property_present(config->dev, "read-only") || config->read_only || !nvmem->reg_write; + nvmem->no_read_write = of_property_read_bool(np, "no-read-write") | + config->read_only; if (config->root_only) nvmem->dev.groups = nvmem->read_only ? nvmem_ro_root_dev_groups : -- 1.9.1