Fixed possible NULL pointer dereference; thanks to Matthieu Bec.

This commit is contained in:
Florian Pose 2014-05-05 13:49:45 +02:00
parent 57b63d4d45
commit b6930dfa9b
1 changed files with 8 additions and 1 deletions

View File

@ -2651,6 +2651,7 @@ int ecrt_master_get_slave(ec_master_t *master, uint16_t slave_position,
{ {
const ec_slave_t *slave; const ec_slave_t *slave;
unsigned int i; unsigned int i;
int ret = 0;
if (down_interruptible(&master->master_sem)) { if (down_interruptible(&master->master_sem)) {
return -EINTR; 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); 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->position = slave->ring_position;
slave_info->vendor_id = slave->sii.vendor_id; slave_info->vendor_id = slave->sii.vendor_id;
slave_info->product_code = slave->sii.product_code; 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; slave_info->name[0] = 0;
} }
out_get_slave:
up(&master->master_sem); up(&master->master_sem);
return 0; return ret;
} }
/*****************************************************************************/ /*****************************************************************************/