From 025327b091470744cbe457c1cfd96f9ecb225237 Mon Sep 17 00:00:00 2001 From: Anders Blomdell <anders.blomdell@control.lth.se> Date: Fri, 22 Mar 2019 08:58:23 +0100 Subject: [PATCH] Only allow access to I/O that exists --- plugins/serial2002/serial2002.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/plugins/serial2002/serial2002.c b/plugins/serial2002/serial2002.c index ae0af1b..4017406 100644 --- a/plugins/serial2002/serial2002.c +++ b/plugins/serial2002/serial2002.c @@ -367,6 +367,28 @@ static int channel_down(struct moberg_channel *channel) static struct moberg_status channel_open(struct moberg_channel *channel) { struct moberg_status result = device_open(channel->context->device); + int count = 0; + switch (channel->kind) { + case chan_ANALOGIN: + count = channel->context->device->analog_in.count; + break; + case chan_ANALOGOUT: + count = channel->context->device->analog_out.count; + break; + case chan_DIGITALIN: + count = channel->context->device->digital_in.count; + break; + case chan_DIGITALOUT: + count = channel->context->device->digital_out.count; + break; + case chan_ENCODERIN: + count = channel->context->device->encoder_in.count; + break; + } + if (channel->context->index >= count) { + device_close(channel->context->device); + result = MOBERG_ERRNO(ENODEV); + } return result; } -- GitLab