Tool/software:
Dear TI Forum,
we found a bug in the library rpmsg library.
Here is a patch with a possible fix:
# * TI RPMsg Char Utility Library # * # * Utility Library for accessing rpmsg devices through rpmsg-char driver # * # * Copyright (C) 2020 Texas Instruments Incorporated - https://www.ti.com/ # * # * Redistribution and use in source and binary forms, with or without # * modification, are permitted provided that the following conditions # * are met: # * # * Redistributions of source code must retain the above copyright # * notice, this list of conditions and the following disclaimer. # * # * Redistributions in binary form must reproduce the above copyright # * notice, this list of conditions and the following disclaimer in the # * documentation and/or other materials provided with the distribution. # * # * Neither the name of Texas Instruments Incorporated nor the names of # * its contributors may be used to endorse or promote products derived # * from this software without specific prior written permission. # * # * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS # * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT # * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR # * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT # * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, # * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT # * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # * # */ diff --git a/src/rpmsg_char.c b/src/rpmsg_char.c index afb4fec..b2886b7 100644 --- a/src/rpmsg_char.c +++ b/src/rpmsg_char.c @@ -274,34 +274,29 @@ static int _rpmsg_char_find_ctrldev(struct rpmsg_char_endpt *ept, * virtio device number and the rpmsg device number. */ sprintf(ctrl_path, "virtio%u.rpmsg_ctrl.0.0", ept->virtio_id); - dir = opendir(rpath); - if (dir) { - /* - * find a directory that matches the rpmsg_ctrl - * form virtio%d.rpmsg_ctrl.0.0 - */ - while ((iter = readdir(dir))) { - if (iter->d_type == DT_DIR) { - if (!strcmp(iter->d_name, ctrl_path)) - break; - } + rewinddir(dir); + /* + * find a directory that matches the rpmsg_ctrl + * form virtio%d.rpmsg_ctrl.0.0 + */ + while ((iter = readdir(dir))) { + if (iter->d_type == DT_DIR) { + if (!strcmp(iter->d_name, ctrl_path)) + break; } - if (iter) { - memset(&fpath, 0, sizeof(fpath)); - sprintf(fpath, "%s/%s/rpmsg", rpath, iter->d_name); - if (check_dir(fpath)) { - fprintf(stderr, "%s: rpmsg directory doesn't exist under %s\n", - __func__, ept->rpmsg_dev_name); - ret = -ENOENT; - } else { - ret = get_child_dir_suffix(fpath, "rpmsg_ctrl%u", &ctrl_id); - } - } else { + } + if (iter) { + memset(&fpath, 0, sizeof(fpath)); + sprintf(fpath, "%s/%s/rpmsg", rpath, iter->d_name); + if (check_dir(fpath)) { + fprintf(stderr, "%s: rpmsg directory doesn't exist under %s\n", + __func__, ept->rpmsg_dev_name); ret = -ENOENT; + } else { + ret = get_child_dir_suffix(fpath, "rpmsg_ctrl%u", &ctrl_id); } - } - else { - ret = -errno; + } else { + ret = -ENOENT; } /* check for backward compatibility if failed */
Regards
igmogo_ku