diff --git a/debian/changelog b/debian/changelog index 92a311d40..bf5a9b18c 100644 --- a/debian/changelog +++ b/debian/changelog @@ -64,6 +64,7 @@ linux (3.9.4-1) UNRELEASED; urgency=low * [x86] vfio: Enable VFIO, VFIO_PCI as modules * [x86] hv: Enable HYPERV_BALLOON as module * security: Enable SECURITY_YAMA, SECURITY_YAMA_STACKED (Closes: #704750) + * iscsi-target: fix heap buffer overflow on error (CVE-2013-2850) [ Aurelien Jarno ] * [mips] Enable KEXEC. diff --git a/debian/patches/bugfix/all/iscsi-target-fix-heap-buffer-overflow-on-error.patch b/debian/patches/bugfix/all/iscsi-target-fix-heap-buffer-overflow-on-error.patch new file mode 100644 index 000000000..8df64f3b7 --- /dev/null +++ b/debian/patches/bugfix/all/iscsi-target-fix-heap-buffer-overflow-on-error.patch @@ -0,0 +1,62 @@ +From: Kees Cook +Date: Thu, 23 May 2013 17:32:17 +0000 +Subject: iscsi-target: fix heap buffer overflow on error + +commit cea4dcfdad926a27a18e188720efe0f2c9403456 upstream. + +If a key was larger than 64 bytes, as checked by iscsi_check_key(), the +error response packet, generated by iscsi_add_notunderstood_response(), +would still attempt to copy the entire key into the packet, overflowing +the structure on the heap. + +Remote preauthentication kernel memory corruption was possible if a +target was configured and listening on the network. + +CVE-2013-2850 + +Signed-off-by: Kees Cook +Cc: stable@vger.kernel.org +Signed-off-by: Nicholas Bellinger +--- +diff --git a/drivers/target/iscsi/iscsi_target_parameters.c b/drivers/target/iscsi/iscsi_target_parameters.c +index c2185fc..e382221 100644 +--- a/drivers/target/iscsi/iscsi_target_parameters.c ++++ b/drivers/target/iscsi/iscsi_target_parameters.c +@@ -758,9 +758,9 @@ static int iscsi_add_notunderstood_response( + } + INIT_LIST_HEAD(&extra_response->er_list); + +- strncpy(extra_response->key, key, strlen(key) + 1); +- strncpy(extra_response->value, NOTUNDERSTOOD, +- strlen(NOTUNDERSTOOD) + 1); ++ strlcpy(extra_response->key, key, sizeof(extra_response->key)); ++ strlcpy(extra_response->value, NOTUNDERSTOOD, ++ sizeof(extra_response->value)); + + list_add_tail(&extra_response->er_list, + ¶m_list->extra_response_list); +@@ -1629,8 +1629,6 @@ int iscsi_decode_text_input( + + if (phase & PHASE_SECURITY) { + if (iscsi_check_for_auth_key(key) > 0) { +- char *tmpptr = key + strlen(key); +- *tmpptr = '='; + kfree(tmpbuf); + return 1; + } +diff --git a/drivers/target/iscsi/iscsi_target_parameters.h b/drivers/target/iscsi/iscsi_target_parameters.h +index 915b067..a47046a 100644 +--- a/drivers/target/iscsi/iscsi_target_parameters.h ++++ b/drivers/target/iscsi/iscsi_target_parameters.h +@@ -1,8 +1,10 @@ + #ifndef ISCSI_PARAMETERS_H + #define ISCSI_PARAMETERS_H + ++#include ++ + struct iscsi_extra_response { +- char key[64]; ++ char key[KEY_MAXLEN]; + char value[32]; + struct list_head er_list; + } ____cacheline_aligned; diff --git a/debian/patches/series b/debian/patches/series index 041440233..c3ef65f69 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -103,3 +103,5 @@ features/arm/usbmisc-imx-add-module_device_table.patch features/arm/imx53-qsb-usb-power.patch features/arm/0001-thermal-Add-driver-for-Armada-370-XP-SoC-thermal-man.patch features/arm/0001-ARM-mvebu-Add-thermal-support-to-Armada-XP-device-tr.patch + +bugfix/all/iscsi-target-fix-heap-buffer-overflow-on-error.patch