SCSI fixes on 20190705

Two iscsi fixes.  One for an oops in the client which can be triggered
 by the server authentication protocol and the other in the target code
 which causes data corruption.
 
 Signed-off-by: James E.J. Bottomley <jejb@linux.ibm.com>
 -----BEGIN PGP SIGNATURE-----
 
 iJwEABMIAEQWIQTnYEDbdso9F2cI+arnQslM7pishQUCXR/L4iYcamFtZXMuYm90
 dG9tbGV5QGhhbnNlbnBhcnRuZXJzaGlwLmNvbQAKCRDnQslM7pisheVbAQDCQ05x
 L/SX0WyiX3dW0pp0kojnzPmfYj7NTBN7QlRwmQD/ZKEk/zc/P26q0lfdswhi8VJG
 mCaBruZwasyCZvktVEo=
 =eq7T
 -----END PGP SIGNATURE-----

Merge tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi

Pull SCSI fixes from James Bottomley:
 "Two iscsi fixes.

  One for an oops in the client which can be triggered by the server
  authentication protocol and the other in the target code which causes
  data corruption"

* tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi:
  scsi: iscsi: set auth_protocol back to NULL if CHAP_A value is not supported
  scsi: target/iblock: Fix overrun in WRITE SAME emulation
This commit is contained in:
Linus Torvalds 2019-07-06 09:56:20 -07:00
commit 4f8b49092c
2 changed files with 9 additions and 9 deletions

View File

@ -81,6 +81,12 @@ static int chap_check_algorithm(const char *a_str)
return CHAP_DIGEST_UNKNOWN; return CHAP_DIGEST_UNKNOWN;
} }
static void chap_close(struct iscsi_conn *conn)
{
kfree(conn->auth_protocol);
conn->auth_protocol = NULL;
}
static struct iscsi_chap *chap_server_open( static struct iscsi_chap *chap_server_open(
struct iscsi_conn *conn, struct iscsi_conn *conn,
struct iscsi_node_auth *auth, struct iscsi_node_auth *auth,
@ -118,7 +124,7 @@ static struct iscsi_chap *chap_server_open(
case CHAP_DIGEST_UNKNOWN: case CHAP_DIGEST_UNKNOWN:
default: default:
pr_err("Unsupported CHAP_A value\n"); pr_err("Unsupported CHAP_A value\n");
kfree(conn->auth_protocol); chap_close(conn);
return NULL; return NULL;
} }
@ -133,19 +139,13 @@ static struct iscsi_chap *chap_server_open(
* Generate Challenge. * Generate Challenge.
*/ */
if (chap_gen_challenge(conn, 1, aic_str, aic_len) < 0) { if (chap_gen_challenge(conn, 1, aic_str, aic_len) < 0) {
kfree(conn->auth_protocol); chap_close(conn);
return NULL; return NULL;
} }
return chap; return chap;
} }
static void chap_close(struct iscsi_conn *conn)
{
kfree(conn->auth_protocol);
conn->auth_protocol = NULL;
}
static int chap_server_compute_md5( static int chap_server_compute_md5(
struct iscsi_conn *conn, struct iscsi_conn *conn,
struct iscsi_node_auth *auth, struct iscsi_node_auth *auth,

View File

@ -502,7 +502,7 @@ iblock_execute_write_same(struct se_cmd *cmd)
/* Always in 512 byte units for Linux/Block */ /* Always in 512 byte units for Linux/Block */
block_lba += sg->length >> SECTOR_SHIFT; block_lba += sg->length >> SECTOR_SHIFT;
sectors -= 1; sectors -= sg->length >> SECTOR_SHIFT;
} }
iblock_submit_bios(&list); iblock_submit_bios(&list);