1f08c3bdfSopenharmony_ci// SPDX-License-Identifier: GPL-2.0-or-later
2f08c3bdfSopenharmony_ci/*
3f08c3bdfSopenharmony_ci * Copyright (C) 2018 Petr Vorel <pvorel@suse.cz>
4f08c3bdfSopenharmony_ci * Copyright (C) 2018 Michael Moese <mmoese@suse.de>
5f08c3bdfSopenharmony_ci *
6f08c3bdfSopenharmony_ci * cve-2018-1000001 realpath buffer underflow
7f08c3bdfSopenharmony_ci * Based on the reproducer posted upstream so other copyrights may apply.
8f08c3bdfSopenharmony_ci * Author: Dmitry V. Levin <ldv@altlinux.org>
9f08c3bdfSopenharmony_ci * LTP conversion from glibc source: Petr Vorel <pvorel@suse.cz>
10f08c3bdfSopenharmony_ci */
11f08c3bdfSopenharmony_ci
12f08c3bdfSopenharmony_ci#include "tst_test.h"
13f08c3bdfSopenharmony_ci
14f08c3bdfSopenharmony_ci#include <errno.h>
15f08c3bdfSopenharmony_ci#include <stdlib.h>
16f08c3bdfSopenharmony_ci
17f08c3bdfSopenharmony_ci#define CHROOT_DIR "cve-2018-1000001"
18f08c3bdfSopenharmony_ci
19f08c3bdfSopenharmony_cistatic void setup(void)
20f08c3bdfSopenharmony_ci{
21f08c3bdfSopenharmony_ci	SAFE_MKDIR(CHROOT_DIR, 0755);
22f08c3bdfSopenharmony_ci	SAFE_CHROOT(CHROOT_DIR);
23f08c3bdfSopenharmony_ci}
24f08c3bdfSopenharmony_ci
25f08c3bdfSopenharmony_cistatic void run(void)
26f08c3bdfSopenharmony_ci{
27f08c3bdfSopenharmony_ci	TESTPTR(realpath(".", NULL));
28f08c3bdfSopenharmony_ci
29f08c3bdfSopenharmony_ci	if (TST_ERR != ENOENT) {
30f08c3bdfSopenharmony_ci		tst_res(TFAIL | TTERRNO, "returned unexpected errno");
31f08c3bdfSopenharmony_ci	} else	if (TST_RET_PTR != NULL) {
32f08c3bdfSopenharmony_ci		tst_res(TFAIL, "syscall didn't return NULL: '%s'",
33f08c3bdfSopenharmony_ci				(char *)TST_RET_PTR);
34f08c3bdfSopenharmony_ci	} else {
35f08c3bdfSopenharmony_ci		tst_res(TPASS, "bug not reproduced");
36f08c3bdfSopenharmony_ci	}
37f08c3bdfSopenharmony_ci}
38f08c3bdfSopenharmony_ci
39f08c3bdfSopenharmony_cistatic struct tst_test test = {
40f08c3bdfSopenharmony_ci	.test_all = run,
41f08c3bdfSopenharmony_ci	.setup = setup,
42f08c3bdfSopenharmony_ci	.needs_root = 1,
43f08c3bdfSopenharmony_ci	.needs_tmpdir = 1,
44f08c3bdfSopenharmony_ci	.tags = (const struct tst_tag[]) {
45f08c3bdfSopenharmony_ci		{"CVE", "2018-1000001"},
46f08c3bdfSopenharmony_ci		{}
47f08c3bdfSopenharmony_ci	}
48f08c3bdfSopenharmony_ci};
49