From 9483b8e1aebb4e976a51affecb212b6be9acf978 Mon Sep 17 00:00:00 2001 From: Florian Pose Date: Wed, 8 Apr 2009 11:48:00 +0000 Subject: [PATCH] Check phy_request length for read operations, too! --- master/fsm_master.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/master/fsm_master.c b/master/fsm_master.c index e3fb4f8c..e74ef28d 100644 --- a/master/fsm_master.c +++ b/master/fsm_master.c @@ -353,6 +353,16 @@ int ec_fsm_master_action_process_phy( "offset 0x%04x, length %u...\n", request->slave->ring_position, request->offset, request->length); + + if (request->length > fsm->datagram->mem_size) { + EC_ERR("Request length (%u) exceeds maximum " + "datagram size (%u)!\n", request->length, + fsm->datagram->mem_size); + request->state = EC_INT_REQUEST_FAILURE; + wake_up(&master->phy_queue); + continue; + } + fsm->phy_request = request; if (request->dir == EC_DIR_INPUT) { @@ -360,14 +370,6 @@ int ec_fsm_master_action_process_phy( request->offset, request->length); ec_datagram_zero(fsm->datagram); } else { - if (request->length > fsm->datagram->mem_size) { - EC_ERR("Request length (%u) exceeds maximum " - "datagram size (%u)!\n", request->length, - fsm->datagram->mem_size); - request->state = EC_INT_REQUEST_FAILURE; - wake_up(&master->phy_queue); - continue; - } ec_datagram_fpwr(fsm->datagram, request->slave->station_address, request->offset, request->length); memcpy(fsm->datagram->data, request->data, request->length);