File: xfail_register_buffers_out_of_scope.c

package info (click to toggle)
liburing 2.14-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 3,448 kB
  • sloc: ansic: 59,512; sh: 816; makefile: 603; cpp: 32
file content (51 lines) | stat: -rw-r--r-- 1,202 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
/* SPDX-License-Identifier: MIT */
/*
 * Description: Check to see if the asan checks catch an stack-use-after-free for io_uring_sqe_set_data
 */

#include <stdio.h>
#include <errno.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <assert.h>
#include <stdlib.h>
#include "liburing.h"
#include "helpers.h"

#include <stdio.h>

#define BUFFERS     8
#define BUFFER_SIZE 128

int main(int argc, char *argv[])
{
	struct io_uring ring;
	struct iovec *iovs;
	int i;
	int ret;

	if (argc > 1)
		return T_EXIT_SKIP;

	ret = io_uring_queue_init(8, &ring, 0);
	if (ret < 0) {
		printf("io_uring_queue_init ret %i\n", ret);
		return T_EXIT_PASS; // this test expects an inverted exit code
	}

	iovs = calloc(BUFFERS, sizeof(struct iovec));
	for (i = 0; i < BUFFERS; i++) {
		iovs[i].iov_base = malloc(BUFFER_SIZE);
		iovs[i].iov_len = BUFFER_SIZE;
	}
	// force one iov_base to be freed, test "passes" if asan catches this bug.
	free(iovs[4].iov_base);

	ret = io_uring_register_buffers(&ring, iovs, BUFFERS);
	printf("io_uring_register_buffers %i\n", ret);

	ret = io_uring_submit_and_wait(&ring, 1);
	printf("submit_and_wait %i\n", ret);

	return T_EXIT_PASS; // this test expects an inverted exit code
}