* [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.