From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pl1-f201.google.com (mail-pl1-f201.google.com [209.85.214.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7DC471B3925 for ; Tue, 2 Dec 2025 01:16:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764638173; cv=none; b=LCpUMOj23vuTb5UmvEu5ukDoAuri4Yr+pHHtcGM8AE9hUhGlsOdOWWhgMq/HR7/3yFcGbt/BIgpOgDx398geG87bCjMenqemQz9xflAkwOgPVWqwmEnzBm6XlDDm3Inx76v72aYCIXpr+Z8wZUnY8gJjTv3zfuTKPdf+qNn82Ig= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764638173; c=relaxed/simple; bh=hy2vG55294VSeJyGO7Ev1IoxTiCR2nljMSD+0AWZ5vo=; h=Date:Mime-Version:Message-ID:Subject:From:Cc:Content-Type; b=kpyiGXsCnwd9lO3JwVZH2XE8omZE2eQrvpYnXchHUd8vzlH+FgTJDavytYlXfSQzOJBjfxcvQwvQiI4UY7doJ3Hq+r2BrimibVtPW7VKp8S7CRU9vaD9+2ywtVZsocEBdW5P2VjIcPy0xvKAQM0qMQlOyZrStZb3qefaIU7uAjk= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--powenkao.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=x4f2k8F3; arc=none smtp.client-ip=209.85.214.201 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--powenkao.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="x4f2k8F3" Received: by mail-pl1-f201.google.com with SMTP id d9443c01a7336-297f587dc2eso97240895ad.2 for ; Mon, 01 Dec 2025 17:16:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1764638171; x=1765242971; darn=vger.kernel.org; h=cc:from:subject:message-id:mime-version:date:from:to:cc:subject :date:message-id:reply-to; bh=XSTXeBO97Cv2Jpm4yedy9AByTs1BE3v3LHZMPe5Q//E=; b=x4f2k8F3ZPGc9IWJK9WKlC/jNmWuSI6lU61lLyxbCMf9XMB5Sckma5UtF3Nw3ycZXV tra9LiwqfHOS5wEff7jodxX5WwMfktKP0BUowHh6JKYghqhy9ZsyVNgl4++U1mkc0eue Ji8Gv/oE88403BbwgzoM8YnpSKG4THmP3rwZFMeX7D0O8p5fJZ0MaKohoX8Hv3mX1e7t gNjx0JowHCtaebU7ob/oySgGZ9RqW32erelje4snQNqw38pVe/OMIMr2M/wHcmC+YVMG gj2Zl4OjBJxrlkZOzoUeRGAUPY+GC6BtmEzrJVUVAMGwo8YnBYA4M/marJDPAeFN/cxB JGbg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764638171; x=1765242971; h=cc:from:subject:message-id:mime-version:date:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=XSTXeBO97Cv2Jpm4yedy9AByTs1BE3v3LHZMPe5Q//E=; b=O5iK+wEQFBqt4Dr1E2QF2ALRlZfKbqwpDs7qbznx2nLwu/pUPIwhomLbrYOGi4Hlh/ XbqRH4mDJqDjzjcPOt9AcvS+84ou+HmxpcVPY0S2cexPLxE9Q0rz8Z3CdjwC76lYCOcV OqFXULlizBtA+OQVIue9fkcfLSGXVqcHbFhGPBeS3DhQ3agnnr8tPNKMWSlb2xnAtK84 VeQ1hNqOuNNSKCQgATIcAhV8SVXeVzUh/Omx/XCkWWlkrDjfnJnViTEehR/ebxABxNUM RhDsEDTZY0JG1UJTHdj4H+RU8sBc1dsZu1dZsBPtZc6ZSeUMtqTEVwIJ0Rzv8IDr6KmD NmjA== X-Forwarded-Encrypted: i=1; AJvYcCXdA8Orass3jwbPu9E3Q9dz84D04M+0B/pSCo40sGo4IfL+2wqz+6sA6T0oaEtUPhXgabVZSZdvM0Nm1lM=@vger.kernel.org X-Gm-Message-State: AOJu0YzCjLliEXucl9m3MFB/Ebl1bntfntuXZGVPSTGYsP38d9Dk7lrg MNWzpBtcZEehQjIK5VfvPQsx7uhwVd27YTxbbIlUVgtPai5hqxxwc/uD/fB6wv5ER0xd5uQU7gO gxNXygl9VbCQDfw== X-Google-Smtp-Source: AGHT+IFnL1DhtzCUFS4I16Soc1IQNk/CEVOnOlLi/gtYubNtUtBCzVuwI9AN26cMeR6+V76YtL1ocbNdP84ljw== X-Received: from plkl3.prod.google.com ([2002:a17:902:d343:b0:297:dac5:aa2f]) (user=powenkao job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:ef09:b0:295:1aa7:edf7 with SMTP id d9443c01a7336-29b6bf3bd88mr440108865ad.30.1764638170683; Mon, 01 Dec 2025 17:16:10 -0800 (PST) Date: Tue, 2 Dec 2025 01:15:27 +0000 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 X-Mailer: git-send-email 2.52.0.177.g9f829587af-goog Message-ID: <20251202011529.73738-1-powenkao@google.com> Subject: [PATCH 1/1] scsi: core: Fix error handler encryption support From: Po-Wen Kao Cc: Brian Kao , "James E.J. Bottomley" , "Martin K. Petersen" , "open list:SCSI SUBSYSTEM" , open list Content-Type: text/plain; charset="UTF-8" From: Brian Kao Some low-level drivers (LLD) access block layer crypto fields, such as rq->crypt_keyslot and rq->crypt_ctx within `struct request`, to configure hardware for inline encryption. However, SCSI Error Handling (EH) commands (e.g., TEST UNIT READY, START STOP UNIT) should not involve any encryption setup. To prevent drivers from erroneously applying crypto settings during EH, this patch saves the original values of rq->crypt_keyslot and rq->crypt_ctx before an EH command is prepared via scsi_eh_prep_cmnd(). These fields in the `struct request` are then set to NULL. The original values are restored in scsi_eh_restore_cmnd() after the EH command completes. This ensures that the block layer crypto context does not leak into EH command execution. Tested-by: Brian Kao Signed-off-by: Brian Kao --- drivers/scsi/scsi_error.c | 16 ++++++++++++++++ include/scsi/scsi_eh.h | 4 ++++ 2 files changed, 20 insertions(+) diff --git a/drivers/scsi/scsi_error.c b/drivers/scsi/scsi_error.c index 10154d78e3360..2d0df74df703a 100644 --- a/drivers/scsi/scsi_error.c +++ b/drivers/scsi/scsi_error.c @@ -1040,6 +1040,7 @@ void scsi_eh_prep_cmnd(struct scsi_cmnd *scmd, struct scsi_eh_save *ses, unsigned char *cmnd, int cmnd_size, unsigned sense_bytes) { struct scsi_device *sdev = scmd->device; + struct request *rq = scsi_cmd_to_rq(scmd); /* * We need saved copies of a number of fields - this is because @@ -1091,6 +1092,16 @@ void scsi_eh_prep_cmnd(struct scsi_cmnd *scmd, struct scsi_eh_save *ses, scmd->cmnd[1] = (scmd->cmnd[1] & 0x1f) | (sdev->lun << 5 & 0xe0); + /* + * Encryption must be disabled for the commands submitted by the error handler. + * Hence, clear the encryption context information. + */ + ses->rq_crypt_keyslot = rq->crypt_keyslot; + ses->rq_crypt_ctx = rq->crypt_ctx; + + rq->crypt_keyslot = NULL; + rq->crypt_ctx = NULL; + /* * Zero the sense buffer. The scsi spec mandates that any * untransferred sense data should be interpreted as being zero. @@ -1108,6 +1119,8 @@ EXPORT_SYMBOL(scsi_eh_prep_cmnd); */ void scsi_eh_restore_cmnd(struct scsi_cmnd* scmd, struct scsi_eh_save *ses) { + struct request *rq = scsi_cmd_to_rq(scmd); + /* * Restore original data */ @@ -1120,6 +1133,9 @@ void scsi_eh_restore_cmnd(struct scsi_cmnd* scmd, struct scsi_eh_save *ses) scmd->underflow = ses->underflow; scmd->prot_op = ses->prot_op; scmd->eh_eflags = ses->eh_eflags; + + rq->crypt_keyslot = ses->rq_crypt_keyslot; + rq->crypt_ctx = ses->rq_crypt_ctx; } EXPORT_SYMBOL(scsi_eh_restore_cmnd); diff --git a/include/scsi/scsi_eh.h b/include/scsi/scsi_eh.h index 1ae08e81339fa..9ef97f7820886 100644 --- a/include/scsi/scsi_eh.h +++ b/include/scsi/scsi_eh.h @@ -41,6 +41,10 @@ struct scsi_eh_save { unsigned char cmnd[32]; struct scsi_data_buffer sdb; struct scatterlist sense_sgl; + + /* struct request fields */ + struct bio_crypt_ctx *rq_crypt_ctx; + struct blk_crypto_keyslot *rq_crypt_keyslot; }; extern void scsi_eh_prep_cmnd(struct scsi_cmnd *scmd, -- 2.52.0.177.g9f829587af-goog