This is merely a historical archive of years 2008-2021, before the migration to mailman3.
A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/OpenBSC@lists.osmocom.org/.
Peter Stuge peter at stuge.seAlvaro Neira wrote: > +++ b/src/serial.c . > +int > +osmo_serial_read(int fd, struct msgb *msg, int numbytes) > +{ > + int rc, bread = 0; This is a nice place to add a bounds check.. > + while (bread < numbytes) { > + rc = read(fd, msg->tail, numbytes - bread); ..so that there is guaranteed room in the msgb for the requested number of bytes. > + if (rc < 0) { > + msgb_free(msg); > + return -1; > + } Are you sure that these functions should destroy the msgb on errors? Also: What about the bytes which have already been read, in case of error? The proposed code discards those bytes. Is that OK? (I don't know the answer to this; that's why I'm asking.) > +int > +osmo_serial_write(int fd, struct msgb *msg) > +{ > + int bwritten = 0, ret = 0; > + > + bwritten = write(fd, msg->data, msg->len); > + if (bwritten < 0 || bwritten < msg->len) { This is incorrect. Both read() and write() may return less than 'count' bytes. You'll need to loop here too to ensure that all data has been written to the port. > + msgb_free(msg); Same question as with the _read function - should this function destroy the msgb on errors? > + ret = -1; I would like the functions to use similar flow. My personal preference for how to handle the return value is the way you use return in the _read function, I find that much nicer than the ret variable in the _write function. But more importantly I think the two should be consistent where possible. //Peter