From b6930dfa9ba4224d03988377a22f83ee1f0aef55 Mon Sep 17 00:00:00 2001 From: Florian Pose Date: Mon, 5 May 2014 13:49:45 +0200 Subject: [PATCH] Fixed possible NULL pointer dereference; thanks to Matthieu Bec. --- master/master.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/master/master.c b/master/master.c index 97e00712..2b94b19a 100644 --- a/master/master.c +++ b/master/master.c @@ -2651,6 +2651,7 @@ int ecrt_master_get_slave(ec_master_t *master, uint16_t slave_position, { const ec_slave_t *slave; unsigned int i; + int ret = 0; if (down_interruptible(&master->master_sem)) { return -EINTR; @@ -2658,6 +2659,11 @@ int ecrt_master_get_slave(ec_master_t *master, uint16_t slave_position, slave = ec_master_find_slave_const(master, 0, slave_position); + if (slave == NULL) { + ret = -ENOENT; + goto out_get_slave; + } + slave_info->position = slave->ring_position; slave_info->vendor_id = slave->sii.vendor_id; slave_info->product_code = slave->sii.product_code; @@ -2694,9 +2700,10 @@ int ecrt_master_get_slave(ec_master_t *master, uint16_t slave_position, slave_info->name[0] = 0; } +out_get_slave: up(&master->master_sem); - return 0; + return ret; } /*****************************************************************************/