Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp868679ybl; Sat, 18 Jan 2020 12:59:36 -0800 (PST) X-Google-Smtp-Source: APXvYqwfXfNcGGaHCXHp7bz9Kgn7ZkfMbtJOsr/BiTbaXt89aDTRWgNhn5xPiCdC5UMDXCW3Mnj3 X-Received: by 2002:aca:1103:: with SMTP id 3mr7747721oir.70.1579381175903; Sat, 18 Jan 2020 12:59:35 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1579381175; cv=none; d=google.com; s=arc-20160816; b=mr+UcOoBRdyl4qivvdyxhjOeWEmduzRjfbYSvISzSySTpKEsRfJ1yWa+nW9rPUJDiQ kfHVwFdt50uDjERIDZLGH5LFCfNv6cGaqeol4imznZab4L//6iTl0W/EgNZ02ebm5azm V5axdYXk6zDIOTuL3quiRe+QhMhYroOjyoPMsNDD7Vvwp8IPTQeYUELa+H/J+R55l+1/ 8Q4pU/hyISEhJnDE5yAHQ3nQ/SCnenEyg/OXQqkya8UqjOrONPX76ApI8VQueyJgElz5 q2HOPAR5VExY+kPN/yXl8abya+Fy2Ggw5ZFIEyL89ghcaiqoiSq7jgtAPpqQQvI2ue4t Yo1g== 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 :dkim-signature; bh=SK7/yao5fsaBBNvMW9060fS3yhEeL6JTPeMbh6+XWqc=; b=s9D8xYT63FVzIVkn5q00mcsebml71i8RFlYl4zd24vc00tQQ/mpR/DAdQTh77bqF6k WQ8j5t1BUti8/evztSkwx8QdmC6MNmImyrlqk7RM5DoI3fu8aSxo9hPMXSgKEG6JFPpX HojfKHkTHlAUhbXtsJvh/zXng8My2XK2husabecPzHR9KakKNcWoz7rG/Q/A5lTbWdCR jYPl8XHUFovnTtkmXUzbcsTVui8wC0Ll6NNOJzox8/B9DoX5y8bz5f2hJN7qlQaGqNM5 JSRCb/kOX2Fm6/9pi1Vy4YXnpmlUo7J4ango+4XUH9guBTS2zGzcK+p0etxzjtDu4jEm Abhg== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=uY7GjVez; 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id y140si16000965oia.49.2020.01.18.12.59.23; Sat, 18 Jan 2020 12:59:35 -0800 (PST) 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; dkim=fail header.i=@gmail.com header.s=20161025 header.b=uY7GjVez; 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; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727060AbgARU4j (ORCPT + 99 others); Sat, 18 Jan 2020 15:56:39 -0500 Received: from mail-wr1-f66.google.com ([209.85.221.66]:43119 "EHLO mail-wr1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727031AbgARU4i (ORCPT ); Sat, 18 Jan 2020 15:56:38 -0500 Received: by mail-wr1-f66.google.com with SMTP id d16so25854265wre.10 for ; Sat, 18 Jan 2020 12:56:37 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id; bh=SK7/yao5fsaBBNvMW9060fS3yhEeL6JTPeMbh6+XWqc=; b=uY7GjVezYNXJ3TKzjl3dgF372yMrTSK7w8G47a/AMGYZwte7SDotv1Z4OSzMi2hFbU HO70+ZQbQIVHEcDERjal0Q4EtM6qCSNRB5pTYuOYBj4F/gmd0cx5jvmYKNCf4BoqyLTF oAL1hIaF3KswqbIZ0b7nH4rOZbzF5NqcfONvMDucYT+E+OUBfsDxKdYRBpaxfjrkADEP UhQls3ufvsek5LwLYty8+TSLu/Yz0xEB4KlSt2KPffq2sS9DOMomkyOScz7k5THZK4ZO VR7PCf69zcSS2jneZ2x+glnImSDlw/hO3OhmwNSulHSrQgbE26NKp0vpGM9hm8VMel74 EqZw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id; bh=SK7/yao5fsaBBNvMW9060fS3yhEeL6JTPeMbh6+XWqc=; b=m7BGUi2ub2msJDcwrhybzDYEaHzWdCcWMX03uk7ZdHZaIx7ezrI+9FPPMgQ6y6QnsE xQ2D8FwgQZikuAWIyceh0UOVdKmWkskyaEtVuTL4tflSBQ1FhikNreW2kHiGyQNqT61x vFeqNZXJ079ESqNfF2UicFMyjLdUuq1wzZvn1yIE67takWDS/Pj7RXVgJKnpZ9pepJ8C dPO37EPHT6U+kVaR1Yzlg17WfkMYAoItEv4VJyRIE+TJ6UpM7w4oc7xASbytBBwHbbgk revT8oOtXHV5h+y3gHVYMxeueEQh9LGH280dKx8FXMg90K6FPM0zs8v3Z5PuCFhbpfod L3yw== X-Gm-Message-State: APjAAAVhTi6xC6eA7WewAEZEP4/iCe9JKBLZw28Wazkxp89VGy+1jnFo 48YxozVi5RMDeuk6RwvOU+CMGy2gYKDwIA== X-Received: by 2002:a05:6000:1047:: with SMTP id c7mr10209792wrx.341.1579380996778; Sat, 18 Jan 2020 12:56:36 -0800 (PST) Received: from Lappy.lan (cpc157701-rdng30-2-0-cust857.15-3.cable.virginm.net. [86.18.131.90]) by smtp.gmail.com with ESMTPSA id t125sm16244042wmf.17.2020.01.18.12.56.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 18 Jan 2020 12:56:35 -0800 (PST) From: Ben Whitten To: linux-kernel@vger.kernel.org Cc: afaerber@suse.de, Ben Whitten , Mark Brown , Greg Kroah-Hartman , "Rafael J. Wysocki" , Han Nandor Subject: [PATCH v2 1/2] regmap: fix writes to non incrementing registers Date: Sat, 18 Jan 2020 20:56:24 +0000 Message-Id: <20200118205625.14532-1-ben.whitten@gmail.com> X-Mailer: git-send-email 2.17.1 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org When checking if a register block is writable we must ensure that the block does not start with or contain a non incrementing register. Fixes: 8b9f9d4dc511 ("regmap: verify if register is writeable before writing operations") Signed-off-by: Ben Whitten --- drivers/base/regmap/regmap.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/drivers/base/regmap/regmap.c b/drivers/base/regmap/regmap.c index 19f57ccfbe1d..59f911e57719 100644 --- a/drivers/base/regmap/regmap.c +++ b/drivers/base/regmap/regmap.c @@ -1488,11 +1488,18 @@ static int _regmap_raw_write_impl(struct regmap *map, unsigned int reg, WARN_ON(!map->bus); - /* Check for unwritable registers before we start */ - for (i = 0; i < val_len / map->format.val_bytes; i++) - if (!regmap_writeable(map, - reg + regmap_get_offset(map, i))) - return -EINVAL; + /* Check for unwritable or noinc registers in range + * before we start + */ + if (!regmap_writeable_noinc(map, reg)) { + for (i = 0; i < val_len / map->format.val_bytes; i++) { + unsigned int element = + reg + regmap_get_offset(map, i); + if (!regmap_writeable(map, element) || + regmap_writeable_noinc(map, element)) + return -EINVAL; + } + } if (!map->cache_bypass && map->format.parse_val) { unsigned int ival; -- 2.17.1