]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
4.19-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 19 Jun 2023 07:48:17 +0000 (09:48 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 19 Jun 2023 07:48:17 +0000 (09:48 +0200)
added patches:
mmc-block-ensure-error-propagation-for-non-blk.patch
powerpc-fix-defconfig-choice-logic-when-cross-compiling.patch

queue-4.19/mmc-block-ensure-error-propagation-for-non-blk.patch [new file with mode: 0644]
queue-4.19/powerpc-fix-defconfig-choice-logic-when-cross-compiling.patch [new file with mode: 0644]
queue-4.19/series

diff --git a/queue-4.19/mmc-block-ensure-error-propagation-for-non-blk.patch b/queue-4.19/mmc-block-ensure-error-propagation-for-non-blk.patch
new file mode 100644 (file)
index 0000000..634fd84
--- /dev/null
@@ -0,0 +1,81 @@
+From 003fb0a51162d940f25fc35e70b0996a12c9e08a Mon Sep 17 00:00:00 2001
+From: Christian Loehle <CLoehle@hyperstone.com>
+Date: Wed, 26 Apr 2023 16:59:39 +0000
+Subject: mmc: block: ensure error propagation for non-blk
+
+From: Christian Loehle <CLoehle@hyperstone.com>
+
+commit 003fb0a51162d940f25fc35e70b0996a12c9e08a upstream.
+
+Requests to the mmc layer usually come through a block device IO.
+The exceptions are the ioctl interface, RPMB chardev ioctl
+and debugfs, which issue their own blk_mq requests through
+blk_execute_rq and do not query the BLK_STS error but the
+mmcblk-internal drv_op_result. This patch ensures that drv_op_result
+defaults to an error and has to be overwritten by the operation
+to be considered successful.
+
+The behavior leads to a bug where the request never propagates
+the error, e.g. by directly erroring out at mmc_blk_mq_issue_rq if
+mmc_blk_part_switch fails. The ioctl caller of the rpmb chardev then
+can never see an error (BLK_STS_IOERR, but drv_op_result is unchanged)
+and thus may assume that their call executed successfully when it did not.
+
+While always checking the blk_execute_rq return value would be
+advised, let's eliminate the error by always setting
+drv_op_result as -EIO to be overwritten on success (or other error)
+
+Fixes: 614f0388f580 ("mmc: block: move single ioctl() commands to block requests")
+Signed-off-by: Christian Loehle <cloehle@hyperstone.com>
+Acked-by: Adrian Hunter <adrian.hunter@intel.com>
+Cc: stable@vger.kernel.org
+Link: https://lore.kernel.org/r/59c17ada35664b818b7bd83752119b2d@hyperstone.com
+Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
+Signed-off-by: Christian Loehle <cloehle@hyperstone.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/mmc/core/block.c |    5 +++++
+ 1 file changed, 5 insertions(+)
+
+--- a/drivers/mmc/core/block.c
++++ b/drivers/mmc/core/block.c
+@@ -250,6 +250,7 @@ static ssize_t power_ro_lock_store(struc
+               goto out_put;
+       }
+       req_to_mmc_queue_req(req)->drv_op = MMC_DRV_OP_BOOT_WP;
++      req_to_mmc_queue_req(req)->drv_op_result = -EIO;
+       blk_execute_rq(mq->queue, NULL, req, 0);
+       ret = req_to_mmc_queue_req(req)->drv_op_result;
+       blk_put_request(req);
+@@ -689,6 +690,7 @@ static int mmc_blk_ioctl_cmd(struct mmc_
+       idatas[0] = idata;
+       req_to_mmc_queue_req(req)->drv_op =
+               rpmb ? MMC_DRV_OP_IOCTL_RPMB : MMC_DRV_OP_IOCTL;
++      req_to_mmc_queue_req(req)->drv_op_result = -EIO;
+       req_to_mmc_queue_req(req)->drv_op_data = idatas;
+       req_to_mmc_queue_req(req)->ioc_count = 1;
+       blk_execute_rq(mq->queue, NULL, req, 0);
+@@ -758,6 +760,7 @@ static int mmc_blk_ioctl_multi_cmd(struc
+       }
+       req_to_mmc_queue_req(req)->drv_op =
+               rpmb ? MMC_DRV_OP_IOCTL_RPMB : MMC_DRV_OP_IOCTL;
++      req_to_mmc_queue_req(req)->drv_op_result = -EIO;
+       req_to_mmc_queue_req(req)->drv_op_data = idata;
+       req_to_mmc_queue_req(req)->ioc_count = num_of_cmds;
+       blk_execute_rq(mq->queue, NULL, req, 0);
+@@ -2748,6 +2751,7 @@ static int mmc_dbg_card_status_get(void
+       if (IS_ERR(req))
+               return PTR_ERR(req);
+       req_to_mmc_queue_req(req)->drv_op = MMC_DRV_OP_GET_CARD_STATUS;
++      req_to_mmc_queue_req(req)->drv_op_result = -EIO;
+       blk_execute_rq(mq->queue, NULL, req, 0);
+       ret = req_to_mmc_queue_req(req)->drv_op_result;
+       if (ret >= 0) {
+@@ -2786,6 +2790,7 @@ static int mmc_ext_csd_open(struct inode
+               goto out_free;
+       }
+       req_to_mmc_queue_req(req)->drv_op = MMC_DRV_OP_GET_EXT_CSD;
++      req_to_mmc_queue_req(req)->drv_op_result = -EIO;
+       req_to_mmc_queue_req(req)->drv_op_data = &ext_csd;
+       blk_execute_rq(mq->queue, NULL, req, 0);
+       err = req_to_mmc_queue_req(req)->drv_op_result;
diff --git a/queue-4.19/powerpc-fix-defconfig-choice-logic-when-cross-compiling.patch b/queue-4.19/powerpc-fix-defconfig-choice-logic-when-cross-compiling.patch
new file mode 100644 (file)
index 0000000..426aab4
--- /dev/null
@@ -0,0 +1,51 @@
+From af5cd05de5dd38cf25d14ea4d30ae9b791d2420b Mon Sep 17 00:00:00 2001
+From: Michael Ellerman <mpe@ellerman.id.au>
+Date: Thu, 7 Feb 2019 16:16:52 +1100
+Subject: powerpc: Fix defconfig choice logic when cross compiling
+
+From: Michael Ellerman <mpe@ellerman.id.au>
+
+commit af5cd05de5dd38cf25d14ea4d30ae9b791d2420b upstream.
+
+Our logic for choosing defconfig doesn't work well in some situations.
+
+For example if you're on a ppc64le machine but you specify a non-empty
+CROSS_COMPILE, in order to use a non-default toolchain, then defconfig
+will give you ppc64_defconfig (big endian):
+
+  $ make CROSS_COMPILE=~/toolchains/gcc-8/bin/powerpc-linux- defconfig
+  *** Default configuration is based on 'ppc64_defconfig'
+
+This is because we assume that CROSS_COMPILE being set means we
+can't be on a ppc machine and rather than checking we just default to
+ppc64_defconfig.
+
+We should just ignore CROSS_COMPILE, instead check the machine with
+uname and if it's one of ppc, ppc64 or ppc64le then use that
+defconfig. If it's none of those then we fall back to ppc64_defconfig.
+
+Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
+Signed-off-by: Alyssa Ross <hi@alyssa.is>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ arch/powerpc/Makefile |    9 ++++-----
+ 1 file changed, 4 insertions(+), 5 deletions(-)
+
+--- a/arch/powerpc/Makefile
++++ b/arch/powerpc/Makefile
+@@ -30,11 +30,10 @@ endif
+ endif
+ endif
+-ifeq ($(CROSS_COMPILE),)
+-KBUILD_DEFCONFIG := $(shell uname -m)_defconfig
+-else
+-KBUILD_DEFCONFIG := ppc64_defconfig
+-endif
++# If we're on a ppc/ppc64/ppc64le machine use that defconfig, otherwise just use
++# ppc64_defconfig because we have nothing better to go on.
++uname := $(shell uname -m)
++KBUILD_DEFCONFIG := $(if $(filter ppc%,$(uname)),$(uname),ppc64)_defconfig
+ ifdef CONFIG_PPC64
+ new_nm := $(shell if $(NM) --help 2>&1 | grep -- '--synthetic' > /dev/null; then echo y; else echo n; fi)
index 7f474c75dbf8a454fe58ce944141f19efcc2438f..f1be078c85e63f24c92ed4eb28906439e3062f6a 100644 (file)
@@ -45,3 +45,5 @@ neighbour-remove-unused-inline-function-neigh_key_eq16.patch
 net-remove-unused-inline-function-dst_hold_and_use.patch
 neighbour-delete-neigh_lookup_nodev-as-not-used.patch
 drm-nouveau-kms-fix-null-pointer-dereference-in-nouveau_connector_detect_depth.patch
+powerpc-fix-defconfig-choice-logic-when-cross-compiling.patch
+mmc-block-ensure-error-propagation-for-non-blk.patch