summaryrefslogtreecommitdiffstats
path: root/src/net
diff options
context:
space:
mode:
Diffstat (limited to 'src/net')
-rw-r--r--src/net/tcp/iscsi.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/net/tcp/iscsi.c b/src/net/tcp/iscsi.c
index 633c895c9..d7c4b1207 100644
--- a/src/net/tcp/iscsi.c
+++ b/src/net/tcp/iscsi.c
@@ -24,6 +24,7 @@
#include <byteswap.h>
#include <gpxe/scsi.h>
#include <gpxe/process.h>
+#include <gpxe/uaccess.h>
#include <gpxe/iscsi.h>
/** @file
@@ -130,7 +131,7 @@ static void iscsi_rx_data_in ( struct iscsi_session *iscsi, void *data,
assert ( iscsi->command != NULL );
assert ( iscsi->command->data_in != NULL );
assert ( ( offset + len ) <= iscsi->command->data_in_len );
- memcpy ( ( iscsi->command->data_in + offset ), data, len );
+ copy_to_user ( iscsi->command->data_in, offset, data, len );
/* Record SCSI status, if present */
if ( data_in->flags & ISCSI_DATA_FLAG_STATUS )
@@ -234,7 +235,11 @@ static void iscsi_tx_data_out ( struct iscsi_session *iscsi ) {
assert ( iscsi->command->data_out != NULL );
assert ( ( offset + len ) <= iscsi->command->data_out_len );
- tcp_send ( &iscsi->tcp, iscsi->command->data_out + offset, len );
+ if ( len > tcp_buflen )
+ len = tcp_buflen;
+ copy_from_user ( tcp_buffer, iscsi->command->data_out, offset, len );
+
+ tcp_send ( &iscsi->tcp, tcp_buffer, len );
}
/****************************************************************************