* [LTP] [PATCH] setsockopt08: Handle ENOPROTOOPT even with compatible config @ 2021-08-06 11:19 Richard Palethorpe 2021-08-10 14:56 ` Martin Doucha 2021-08-11 7:24 ` [LTP] [PATCH v2] " Richard Palethorpe 0 siblings, 2 replies; 5+ messages in thread From: Richard Palethorpe @ 2021-08-06 11:19 UTC (permalink / raw) To: ltp One or more necessary modules can be missing even if they are present in the config. Signed-off-by: Richard Palethorpe <rpalethorpe@suse.com> --- .../kernel/syscalls/setsockopt/setsockopt08.c | 24 +++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/testcases/kernel/syscalls/setsockopt/setsockopt08.c b/testcases/kernel/syscalls/setsockopt/setsockopt08.c index 33892f9b1..d3cd5b5b2 100644 --- a/testcases/kernel/syscalls/setsockopt/setsockopt08.c +++ b/testcases/kernel/syscalls/setsockopt/setsockopt08.c @@ -110,6 +110,7 @@ void run(void) struct xt_entry_target *xt_entry_tgt = ((struct xt_entry_target *) (&ipt_entry->elems[0] + match_size)); int fd = SAFE_SOCKET(AF_INET, SOCK_DGRAM, 0); + int result; xt_entry_match->u.user.match_size = (u_int16_t)match_size; strcpy(xt_entry_match->u.user.name, "state"); @@ -126,10 +127,25 @@ void run(void) ipt_replace->num_counters = 1; ipt_replace->size = ipt_entry->next_offset; - TST_EXP_FAIL(setsockopt(fd, IPPROTO_IP, IPT_SO_SET_REPLACE, buffer, 1), - EINVAL, - "setsockopt(%d, IPPROTO_IP, IPT_SO_SET_REPLACE, %p, 1)", - fd, buffer); + errno = 0; + if (setsockopt(fd, IPPROTO_IP, IPT_SO_SET_REPLACE, buffer, 1) == -1) { + switch (errno) { + case EINVAL: + result = TPASS; + break; + case ENOPROTOOPT: + result = TCONF; + break; + default: + result = TFAIL; + } + } else { + result = TFAIL; + } + + tst_res(result | TERRNO, + "setsockopt(%d, IPPROTO_IP, IPT_SO_SET_REPLACE, %p, 1)", + fd, buffer); SAFE_CLOSE(fd); } -- 2.31.1 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* [LTP] [PATCH] setsockopt08: Handle ENOPROTOOPT even with compatible config 2021-08-06 11:19 [LTP] [PATCH] setsockopt08: Handle ENOPROTOOPT even with compatible config Richard Palethorpe @ 2021-08-10 14:56 ` Martin Doucha 2021-08-11 7:09 ` Richard Palethorpe 2021-08-11 7:24 ` [LTP] [PATCH v2] " Richard Palethorpe 1 sibling, 1 reply; 5+ messages in thread From: Martin Doucha @ 2021-08-10 14:56 UTC (permalink / raw) To: ltp Hi, On 06. 08. 21 13:19, Richard Palethorpe via ltp wrote: > One or more necessary modules can be missing even if they are present > in the config. > > Signed-off-by: Richard Palethorpe <rpalethorpe@suse.com> > --- > .../kernel/syscalls/setsockopt/setsockopt08.c | 24 +++++++++++++++---- > 1 file changed, 20 insertions(+), 4 deletions(-) > > diff --git a/testcases/kernel/syscalls/setsockopt/setsockopt08.c b/testcases/kernel/syscalls/setsockopt/setsockopt08.c > index 33892f9b1..d3cd5b5b2 100644 > --- a/testcases/kernel/syscalls/setsockopt/setsockopt08.c > +++ b/testcases/kernel/syscalls/setsockopt/setsockopt08.c > @@ -110,6 +110,7 @@ void run(void) > struct xt_entry_target *xt_entry_tgt = > ((struct xt_entry_target *) (&ipt_entry->elems[0] + match_size)); > int fd = SAFE_SOCKET(AF_INET, SOCK_DGRAM, 0); > + int result; > > xt_entry_match->u.user.match_size = (u_int16_t)match_size; > strcpy(xt_entry_match->u.user.name, "state"); > @@ -126,10 +127,25 @@ void run(void) > ipt_replace->num_counters = 1; > ipt_replace->size = ipt_entry->next_offset; > > - TST_EXP_FAIL(setsockopt(fd, IPPROTO_IP, IPT_SO_SET_REPLACE, buffer, 1), > - EINVAL, > - "setsockopt(%d, IPPROTO_IP, IPT_SO_SET_REPLACE, %p, 1)", > - fd, buffer); > + errno = 0; > + if (setsockopt(fd, IPPROTO_IP, IPT_SO_SET_REPLACE, buffer, 1) == -1) { > + switch (errno) { > + case EINVAL: > + result = TPASS; > + break; > + case ENOPROTOOPT: > + result = TCONF; > + break; > + default: > + result = TFAIL; > + } > + } else { > + result = TFAIL; > + } > + > + tst_res(result | TERRNO, > + "setsockopt(%d, IPPROTO_IP, IPT_SO_SET_REPLACE, %p, 1)", > + fd, buffer); > > SAFE_CLOSE(fd); > } I think it'd be better to call tst_brk(TCONF) when setsockopt() returns ENOPROTOOPT. The CVE runfile iterates the test 100 times and this error will not change between iterations. -- Martin Doucha mdoucha@suse.cz QA Engineer for Software Maintenance SUSE LINUX, s.r.o. CORSO IIa Krizikova 148/34 186 00 Prague 8 Czech Republic ^ permalink raw reply [flat|nested] 5+ messages in thread
* [LTP] [PATCH] setsockopt08: Handle ENOPROTOOPT even with compatible config 2021-08-10 14:56 ` Martin Doucha @ 2021-08-11 7:09 ` Richard Palethorpe 0 siblings, 0 replies; 5+ messages in thread From: Richard Palethorpe @ 2021-08-11 7:09 UTC (permalink / raw) To: ltp Hello Martin, Martin Doucha <mdoucha@suse.cz> writes: > Hi, > > On 06. 08. 21 13:19, Richard Palethorpe via ltp wrote: >> One or more necessary modules can be missing even if they are present >> in the config. >> >> Signed-off-by: Richard Palethorpe <rpalethorpe@suse.com> >> --- >> .../kernel/syscalls/setsockopt/setsockopt08.c | 24 +++++++++++++++---- >> 1 file changed, 20 insertions(+), 4 deletions(-) >> >> diff --git a/testcases/kernel/syscalls/setsockopt/setsockopt08.c b/testcases/kernel/syscalls/setsockopt/setsockopt08.c >> index 33892f9b1..d3cd5b5b2 100644 >> --- a/testcases/kernel/syscalls/setsockopt/setsockopt08.c >> +++ b/testcases/kernel/syscalls/setsockopt/setsockopt08.c >> @@ -110,6 +110,7 @@ void run(void) >> struct xt_entry_target *xt_entry_tgt = >> ((struct xt_entry_target *) (&ipt_entry->elems[0] + match_size)); >> int fd = SAFE_SOCKET(AF_INET, SOCK_DGRAM, 0); >> + int result; >> >> xt_entry_match->u.user.match_size = (u_int16_t)match_size; >> strcpy(xt_entry_match->u.user.name, "state"); >> @@ -126,10 +127,25 @@ void run(void) >> ipt_replace->num_counters = 1; >> ipt_replace->size = ipt_entry->next_offset; >> >> - TST_EXP_FAIL(setsockopt(fd, IPPROTO_IP, IPT_SO_SET_REPLACE, buffer, 1), >> - EINVAL, >> - "setsockopt(%d, IPPROTO_IP, IPT_SO_SET_REPLACE, %p, 1)", >> - fd, buffer); >> + errno = 0; >> + if (setsockopt(fd, IPPROTO_IP, IPT_SO_SET_REPLACE, buffer, 1) == -1) { >> + switch (errno) { >> + case EINVAL: >> + result = TPASS; >> + break; >> + case ENOPROTOOPT: >> + result = TCONF; >> + break; >> + default: >> + result = TFAIL; >> + } >> + } else { >> + result = TFAIL; >> + } >> + >> + tst_res(result | TERRNO, >> + "setsockopt(%d, IPPROTO_IP, IPT_SO_SET_REPLACE, %p, 1)", >> + fd, buffer); >> >> SAFE_CLOSE(fd); >> } > > I think it'd be better to call tst_brk(TCONF) when setsockopt() returns > ENOPROTOOPT. The CVE runfile iterates the test 100 times and this error > will not change between iterations. Ah, yes, this is a mistake, I will reroll the patch. -- Thank you, Richard. ^ permalink raw reply [flat|nested] 5+ messages in thread
* [LTP] [PATCH v2] setsockopt08: Handle ENOPROTOOPT even with compatible config 2021-08-06 11:19 [LTP] [PATCH] setsockopt08: Handle ENOPROTOOPT even with compatible config Richard Palethorpe 2021-08-10 14:56 ` Martin Doucha @ 2021-08-11 7:24 ` Richard Palethorpe 2021-08-11 14:24 ` Martin Doucha 1 sibling, 1 reply; 5+ messages in thread From: Richard Palethorpe @ 2021-08-11 7:24 UTC (permalink / raw) To: ltp One or more necessary modules can be missing even if they are present in the config. Signed-off-by: Richard Palethorpe <rpalethorpe@suse.com> --- V2: * Use tst_brk with TCONF .../kernel/syscalls/setsockopt/setsockopt08.c | 24 +++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/testcases/kernel/syscalls/setsockopt/setsockopt08.c b/testcases/kernel/syscalls/setsockopt/setsockopt08.c index 33892f9b1..7afb98403 100644 --- a/testcases/kernel/syscalls/setsockopt/setsockopt08.c +++ b/testcases/kernel/syscalls/setsockopt/setsockopt08.c @@ -101,6 +101,8 @@ void setup(void) void run(void) { + const char *const res_fmt_str = + "setsockopt(%d, IPPROTO_IP, IPT_SO_SET_REPLACE, %p, 1)"; struct ipt_replace *ipt_replace = buffer; struct ipt_entry *ipt_entry = &ipt_replace->entries[0]; struct xt_entry_match *xt_entry_match = @@ -110,6 +112,7 @@ void run(void) struct xt_entry_target *xt_entry_tgt = ((struct xt_entry_target *) (&ipt_entry->elems[0] + match_size)); int fd = SAFE_SOCKET(AF_INET, SOCK_DGRAM, 0); + int result; xt_entry_match->u.user.match_size = (u_int16_t)match_size; strcpy(xt_entry_match->u.user.name, "state"); @@ -126,10 +129,23 @@ void run(void) ipt_replace->num_counters = 1; ipt_replace->size = ipt_entry->next_offset; - TST_EXP_FAIL(setsockopt(fd, IPPROTO_IP, IPT_SO_SET_REPLACE, buffer, 1), - EINVAL, - "setsockopt(%d, IPPROTO_IP, IPT_SO_SET_REPLACE, %p, 1)", - fd, buffer); + errno = 0; + if (setsockopt(fd, IPPROTO_IP, IPT_SO_SET_REPLACE, buffer, 1) == -1) { + switch (errno) { + case EINVAL: + result = TPASS; + break; + case ENOPROTOOPT: + tst_brk(TCONF | TERRNO, res_fmt_str, fd, buffer); + return; + default: + result = TFAIL; + } + } else { + result = TFAIL; + } + + tst_res(result | TERRNO, res_fmt_str, fd, buffer); SAFE_CLOSE(fd); } -- 2.31.1 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* [LTP] [PATCH v2] setsockopt08: Handle ENOPROTOOPT even with compatible config 2021-08-11 7:24 ` [LTP] [PATCH v2] " Richard Palethorpe @ 2021-08-11 14:24 ` Martin Doucha 0 siblings, 0 replies; 5+ messages in thread From: Martin Doucha @ 2021-08-11 14:24 UTC (permalink / raw) To: ltp On 11. 08. 21 9:24, Richard Palethorpe via ltp wrote: > One or more necessary modules can be missing even if they are present > in the config. > > Signed-off-by: Richard Palethorpe <rpalethorpe@suse.com> > --- > > V2: > * Use tst_brk with TCONF > > .../kernel/syscalls/setsockopt/setsockopt08.c | 24 +++++++++++++++---- > 1 file changed, 20 insertions(+), 4 deletions(-) > > diff --git a/testcases/kernel/syscalls/setsockopt/setsockopt08.c b/testcases/kernel/syscalls/setsockopt/setsockopt08.c > index 33892f9b1..7afb98403 100644 > --- a/testcases/kernel/syscalls/setsockopt/setsockopt08.c > +++ b/testcases/kernel/syscalls/setsockopt/setsockopt08.c > @@ -101,6 +101,8 @@ void setup(void) > > void run(void) > { > + const char *const res_fmt_str = > + "setsockopt(%d, IPPROTO_IP, IPT_SO_SET_REPLACE, %p, 1)"; > struct ipt_replace *ipt_replace = buffer; > struct ipt_entry *ipt_entry = &ipt_replace->entries[0]; > struct xt_entry_match *xt_entry_match = > @@ -110,6 +112,7 @@ void run(void) > struct xt_entry_target *xt_entry_tgt = > ((struct xt_entry_target *) (&ipt_entry->elems[0] + match_size)); > int fd = SAFE_SOCKET(AF_INET, SOCK_DGRAM, 0); > + int result; > > xt_entry_match->u.user.match_size = (u_int16_t)match_size; > strcpy(xt_entry_match->u.user.name, "state"); > @@ -126,10 +129,23 @@ void run(void) > ipt_replace->num_counters = 1; > ipt_replace->size = ipt_entry->next_offset; > > - TST_EXP_FAIL(setsockopt(fd, IPPROTO_IP, IPT_SO_SET_REPLACE, buffer, 1), > - EINVAL, > - "setsockopt(%d, IPPROTO_IP, IPT_SO_SET_REPLACE, %p, 1)", > - fd, buffer); > + errno = 0; > + if (setsockopt(fd, IPPROTO_IP, IPT_SO_SET_REPLACE, buffer, 1) == -1) { > + switch (errno) { > + case EINVAL: > + result = TPASS; > + break; > + case ENOPROTOOPT: > + tst_brk(TCONF | TERRNO, res_fmt_str, fd, buffer); > + return; > + default: > + result = TFAIL; > + } > + } else { > + result = TFAIL; > + } > + > + tst_res(result | TERRNO, res_fmt_str, fd, buffer); > > SAFE_CLOSE(fd); > } > I think this would be much cleaner: TEST(setsockopt(fd, IPPROTO_IP, IPT_SO_SET_REPLACE, buffer, 1)); if (TST_RET == -1 && TST_ERR == ENOPROTOOPT) tst_brk(TCONF | TTERRNO, res_fmt_str, fd, buffer); result = (TST_RET == -1 && TST_ERR == EINVAL) ? TPASS : TFAIL; tst_res(result | TTERRNO, res_fmt_str, fd, buffer); -- Martin Doucha mdoucha@suse.cz QA Engineer for Software Maintenance SUSE LINUX, s.r.o. CORSO IIa Krizikova 148/34 186 00 Prague 8 Czech Republic ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2021-08-11 14:24 UTC | newest] Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2021-08-06 11:19 [LTP] [PATCH] setsockopt08: Handle ENOPROTOOPT even with compatible config Richard Palethorpe 2021-08-10 14:56 ` Martin Doucha 2021-08-11 7:09 ` Richard Palethorpe 2021-08-11 7:24 ` [LTP] [PATCH v2] " Richard Palethorpe 2021-08-11 14:24 ` Martin Doucha
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.