Hi,
On 9/23/22 14:42, Beata Michalska wrote:
Hi Amit,
On Mon, Sep 19, 2022 at 04:12:01PM +0530, Amit Daniel Kachhap wrote:
Musl and glibc syscall wrappers handles the null mq name in different ways and report different errors.
There is a small subtlety there as musl does not report an error on invalid mq name at all - it ignores it. Note that this is actually an empty string (for the test case affected) but any name which does not follow the expected format (as of: does not start with '/') will be silently accepted by musl and passed over to the actual syscall.
Avoid the syscall wrapper by calling the syscall directly. This needs skipping the leading "/" character in mq_name as is expected by the kernel.
Agreed that this patch brings some shortcomings. I will update the commit log with more details.
Thanks, Amit Daniel
Signed-off-by: Amit Daniel Kachhap amit.kachhap@arm.com
Changes in v2: *) This is a new patch and added due to error in syscall mq_open reported by Beata.
testcases/kernel/syscalls/mq_open/mq_open01.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/testcases/kernel/syscalls/mq_open/mq_open01.c b/testcases/kernel/syscalls/mq_open/mq_open01.c index cd2a229d8..537af5b85 100644 --- a/testcases/kernel/syscalls/mq_open/mq_open01.c +++ b/testcases/kernel/syscalls/mq_open/mq_open01.c @@ -14,6 +14,7 @@ #include "tst_test.h" #include "tst_safe_file_ops.h" #include "tst_safe_posix_ipc.h" +#include "lapi/syscalls.h" #define QUEUE_NAME "/test_mqueue" #define QUEUE_INIT "/init_mqueue" @@ -95,7 +96,7 @@ static struct test_case tcase[] = { .qname = "", .oflag = O_CREAT, .ret = -1,
.err = EINVAL,
}, { .desc = "NORMAL",.err = ENOENT,
@@ -227,8 +228,10 @@ static void do_test(unsigned int i) if (tc->setup) tc->setup();
- TEST(fd = mq_open(qname, tc->oflag, S_IRWXU, tc->rq));
Minor: We are losing here an empty line separating the 'if' blocks
BR B.
if (*qname == '/')
TEST(fd = tst_syscall(__NR_mq_open, qname + 1, tc->oflag, S_IRWXU, tc->rq));
else
TEST(fd = tst_syscall(__NR_mq_open, qname, tc->oflag, S_IRWXU, tc->rq));
if (fd > 0 && tc->rq) { if (mq_getattr(fd, &oldattr) < 0) {
-- 2.17.1