Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp11952imu; Fri, 14 Dec 2018 12:34:47 -0800 (PST) X-Google-Smtp-Source: AFSGD/UFzNNVQ1TuedlLIGsuh+9OeCZf4oy+cculWhOUwXozUYkBaCt6uXSjEdd6eJ5ICuvlTb+I X-Received: by 2002:a17:902:7687:: with SMTP id m7mr4152623pll.187.1544819687318; Fri, 14 Dec 2018 12:34:47 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1544819687; cv=none; d=google.com; s=arc-20160816; b=F6OSNx3l7XOaPPMg6d6rGO7XvUJlWhv44xaOVQYx3zl+EVx5MSc1VqfLbATmUX5Vwo o0gymIDA1r+do8DJnkCMm+ELwQL60tDdSMLuWodGotIYXYdHsO9TZuJiYaN/YH6kXB46 4Pucww6cg7w/Nx0SqUbMhHmy0QOEGSI2y0VOOSQkwMqFXtkTjWztmD6jykxFg9cDIUgN a77YYIjMLfakyBrq9tEAOmBoT7/7uEEmbqb49D1sP2vS3cf10JYUJAB9wYU+JF84rmdf iWrj9jeVHpD6NpRm6nmOwHRvrb+Rs27yDwIkwuzp4Kd9kDo/97lj9dXfCr+j5m1yiiyL n/Kw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=Ytmc+spcpEGLjGUV2HdRls/duc60JBpOjSF8kd1xc3U=; b=Jz7tLGrupdL50e7lG7qJcrcYQHTHb8cA1aqy0BnuYpY39/h2Q2OJhQ4r3LTgW2daQ2 t/LBH+e15bc4MONv8V9C+g6ZQ+f9gzcPo5PmJqTVzQC9tV/QpPgYHXEI3FmtQ9SrMxrT 1l9oOwZX8xw87pl7UZzmCe+V2xsxDNoqOCShpfOttvPqQ0mRYiQS/fGaXlvEhfYg6g4v ZOpBZWLVUNK2iYK8mDGrIEDaCrhBMo5Y726fzUDhP6RbJ+EfSiS87C31sPBWrPGEBI1w u/DPBjx6FNVz5dACVVmQCjn4ZP172s2Ze/f3OvftMt4r/RplyYx70OXiWWMk1/P5MtCy iKqQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b="zYZchJJ/"; 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=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id b70si4964698pfe.168.2018.12.14.12.34.27; Fri, 14 Dec 2018 12:34:47 -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=pass header.i=@kernel.org header.s=default header.b="zYZchJJ/"; 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=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730835AbeLNUc3 (ORCPT + 99 others); Fri, 14 Dec 2018 15:32:29 -0500 Received: from mail.kernel.org ([198.145.29.99]:36942 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730714AbeLNUc3 (ORCPT ); Fri, 14 Dec 2018 15:32:29 -0500 Received: from localhost (unknown [104.132.0.93]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 113EB2080F; Fri, 14 Dec 2018 20:32:29 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1544819549; bh=pRgCTIOsiEvEuttqrH8YrexzH/2Tl0/O+NJvbjuss00=; h=From:To:Cc:Subject:Date:From; b=zYZchJJ/wTQAq2nqnpMKRyi/o/mWnQnaIy/hj606dBPVi+0mUiZTPrlyr+O5j4KO2 INVfXqkD+A84fA+ooyfeVIOF6GYlZRX1X1nwn9PMqTYHEIa7vALfLPLFidfmwnJPEn PVLFZAgVuwdxmzynryAXyN8JKLtTjr1L/KwfM94g= From: Jaegeuk Kim To: linux-kernel@vger.kernel.org Cc: Jaegeuk Kim , Jens Axboe , linux-block@vger.kernel.org Subject: [PATCH] loop: drop caches if offset is changed Date: Fri, 14 Dec 2018 12:32:23 -0800 Message-Id: <20181214203223.7063-1-jaegeuk@kernel.org> X-Mailer: git-send-email 2.19.0.605.g01d371f741-goog MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org If we don't drop caches used in old offset, we can get old data from new offset, which gives unexpected data to user. Martijn found a loopback bug in the below scenario. 1) LOOP_SET_FD loads first two pages on loop file 2) LOOP_SET_STATUS64 changes the offset on the loop file 3) mount is failed due to the cached pages having wrong superblock This patch drops caches when we change lo->offset. Cc: Jens Axboe Cc: linux-block@vger.kernel.org Reported-by: Martijn Coenen Signed-off-by: Jaegeuk Kim --- drivers/block/loop.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/block/loop.c b/drivers/block/loop.c index cb0cc8685076..f073a3f1a7cd 100644 --- a/drivers/block/loop.c +++ b/drivers/block/loop.c @@ -1154,6 +1154,12 @@ loop_set_status(struct loop_device *lo, const struct loop_info64 *info) if (lo->lo_offset != info->lo_offset || lo->lo_sizelimit != info->lo_sizelimit) { + struct block_device *bdev = lo->lo_device; + + /* drop stale caches used in old offset */ + sync_blockdev(bdev); + kill_bdev(bdev); + if (figure_loop_size(lo, info->lo_offset, info->lo_sizelimit)) { err = -EFBIG; goto exit; -- 2.19.0.605.g01d371f741-goog