/* * Check decoding of ICMP_FILTER. * * Copyright (c) 2016 Dmitry V. Levin * Copyright (c) 2016-2021 The strace developers. * All rights reserved. * * SPDX-License-Identifier: GPL-2.0-or-later */ #include "tests.h" #include #include #include int main(void) { getsockopt(-1, SOL_RAW, ICMP_FILTER, 0, 0); printf("getsockopt(-1, SOL_RAW, ICMP_FILTER, NULL, NULL) = -1 %s (%m)\n", errno2name()); setsockopt(-1, SOL_RAW, ICMP_FILTER, NULL, 0); printf("setsockopt(-1, SOL_RAW, ICMP_FILTER, NULL, 0) = -1 %s (%m)\n", errno2name()); TAIL_ALLOC_OBJECT_CONST_PTR(socklen_t, plen); void *const efault = plen + 1; TAIL_ALLOC_OBJECT_CONST_PTR(struct icmp_filter, f); getsockopt(-1, SOL_RAW, ICMP_FILTER, f, plen); printf("getsockopt(-1, SOL_RAW, ICMP_FILTER, %p, [%d]) = -1 %s (%m)\n", f, *plen, errno2name()); setsockopt(-1, SOL_RAW, ICMP_FILTER, efault, sizeof(*f)); printf("setsockopt(-1, SOL_RAW, ICMP_FILTER, %p, %u) = -1 %s (%m)\n", efault, (unsigned) sizeof(*f), errno2name()); f->data = ~( 1<