Fall back to a temp file if fmemopen() is not available().
This commit is contained in:
@@ -282,6 +282,9 @@
|
|||||||
/* Define to 1 if you have the `fexecve' function. */
|
/* Define to 1 if you have the `fexecve' function. */
|
||||||
#undef HAVE_FEXECVE
|
#undef HAVE_FEXECVE
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `fmemopen' function. */
|
||||||
|
#undef HAVE_FMEMOPEN
|
||||||
|
|
||||||
/* Define to 1 if you have the `fnmatch' function. */
|
/* Define to 1 if you have the `fnmatch' function. */
|
||||||
#undef HAVE_FNMATCH
|
#undef HAVE_FNMATCH
|
||||||
|
|
||||||
|
2
configure
vendored
2
configure
vendored
@@ -3220,6 +3220,7 @@ as_fn_append ac_header_c_list " sys/sysmacros.h sys_sysmacros_h HAVE_SYS_SYSMACR
|
|||||||
as_fn_append ac_header_c_list " sys/syscall.h sys_syscall_h HAVE_SYS_SYSCALL_H"
|
as_fn_append ac_header_c_list " sys/syscall.h sys_syscall_h HAVE_SYS_SYSCALL_H"
|
||||||
as_fn_append ac_header_c_list " sys/statvfs.h sys_statvfs_h HAVE_SYS_STATVFS_H"
|
as_fn_append ac_header_c_list " sys/statvfs.h sys_statvfs_h HAVE_SYS_STATVFS_H"
|
||||||
as_fn_append ac_func_c_list " fexecve HAVE_FEXECVE"
|
as_fn_append ac_func_c_list " fexecve HAVE_FEXECVE"
|
||||||
|
as_fn_append ac_func_c_list " fmemopen HAVE_FMEMOPEN"
|
||||||
as_fn_append ac_func_c_list " killpg HAVE_KILLPG"
|
as_fn_append ac_func_c_list " killpg HAVE_KILLPG"
|
||||||
as_fn_append ac_func_c_list " nl_langinfo HAVE_NL_LANGINFO"
|
as_fn_append ac_func_c_list " nl_langinfo HAVE_NL_LANGINFO"
|
||||||
as_fn_append ac_func_c_list " faccessat HAVE_FACCESSAT"
|
as_fn_append ac_func_c_list " faccessat HAVE_FACCESSAT"
|
||||||
@@ -20167,6 +20168,7 @@ done
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
case "$host_os" in
|
case "$host_os" in
|
||||||
hpux*)
|
hpux*)
|
||||||
if test X"$ac_cv_func_pread" = X"yes"; then
|
if test X"$ac_cv_func_pread" = X"yes"; then
|
||||||
|
@@ -2685,7 +2685,7 @@ dnl
|
|||||||
dnl Function checks
|
dnl Function checks
|
||||||
dnl
|
dnl
|
||||||
AC_FUNC_GETGROUPS
|
AC_FUNC_GETGROUPS
|
||||||
AC_CHECK_FUNCS_ONCE([fexecve killpg nl_langinfo faccessat wordexp getauxval fseeko])
|
AC_CHECK_FUNCS_ONCE([fexecve fmemopen killpg nl_langinfo faccessat wordexp getauxval fseeko])
|
||||||
case "$host_os" in
|
case "$host_os" in
|
||||||
hpux*)
|
hpux*)
|
||||||
if test X"$ac_cv_func_pread" = X"yes"; then
|
if test X"$ac_cv_func_pread" = X"yes"; then
|
||||||
|
@@ -34,13 +34,39 @@
|
|||||||
|
|
||||||
#include "iolog_json.h"
|
#include "iolog_json.h"
|
||||||
|
|
||||||
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
|
static FILE *
|
||||||
|
open_data(const uint8_t *data, size_t size)
|
||||||
|
{
|
||||||
|
#ifdef HAVE_FMEMOPEN
|
||||||
|
/* Operate in-memory. */
|
||||||
|
return fmemopen((void *)data, size, "r");
|
||||||
|
#else
|
||||||
|
char tempfile[] = "/tmp/json.XXXXXX";
|
||||||
|
size_t nwritten;
|
||||||
|
int fd;
|
||||||
|
|
||||||
|
/* Use (unlinked) temporary file. */
|
||||||
|
fd = mkstemp(tempfile);
|
||||||
|
if (fd == -1)
|
||||||
|
return NULL;
|
||||||
|
unlink(tempfile);
|
||||||
|
nwritten = write(fd, data, size);
|
||||||
|
if (nwritten != size) {
|
||||||
|
close(fd);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
lseek(fd, 0, SEEK_SET);
|
||||||
|
return fdopen(fd, "r");
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
|
||||||
{
|
{
|
||||||
struct eventlog *evlog = NULL;
|
struct eventlog *evlog = NULL;
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
|
|
||||||
/* Operate in-memory. */
|
fp = open_data(data, size);
|
||||||
fp = fmemopen((void *)data, size, "r");
|
|
||||||
if (fp == NULL)
|
if (fp == NULL)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
@@ -32,13 +32,39 @@
|
|||||||
#include "sudo_iolog.h"
|
#include "sudo_iolog.h"
|
||||||
#include "sudo_util.h"
|
#include "sudo_util.h"
|
||||||
|
|
||||||
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
|
static FILE *
|
||||||
|
open_data(const uint8_t *data, size_t size)
|
||||||
|
{
|
||||||
|
#ifdef HAVE_FMEMOPEN
|
||||||
|
/* Operate in-memory. */
|
||||||
|
return fmemopen((void *)data, size, "r");
|
||||||
|
#else
|
||||||
|
char tempfile[] = "/tmp/legacy.XXXXXX";
|
||||||
|
size_t nwritten;
|
||||||
|
int fd;
|
||||||
|
|
||||||
|
/* Use (unlinked) temporary file. */
|
||||||
|
fd = mkstemp(tempfile);
|
||||||
|
if (fd == -1)
|
||||||
|
return NULL;
|
||||||
|
unlink(tempfile);
|
||||||
|
nwritten = write(fd, data, size);
|
||||||
|
if (nwritten != size) {
|
||||||
|
close(fd);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
lseek(fd, 0, SEEK_SET);
|
||||||
|
return fdopen(fd, "r");
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
|
||||||
{
|
{
|
||||||
struct eventlog *evlog = NULL;
|
struct eventlog *evlog = NULL;
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
|
|
||||||
/* Operate in-memory. */
|
fp = open_data(data, size);
|
||||||
fp = fmemopen((void *)data, size, "r");
|
|
||||||
if (fp == NULL)
|
if (fp == NULL)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
@@ -40,7 +40,8 @@
|
|||||||
#include "sudo_iolog.h"
|
#include "sudo_iolog.h"
|
||||||
#include "sudo_util.h"
|
#include "sudo_util.h"
|
||||||
|
|
||||||
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
|
int
|
||||||
|
LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
|
||||||
{
|
{
|
||||||
struct iolog_file iolog_file = { true };
|
struct iolog_file iolog_file = { true };
|
||||||
struct timing_closure closure;
|
struct timing_closure closure;
|
||||||
|
@@ -43,7 +43,34 @@ open_sudoers(const char *file, bool doedit, bool *keepopen)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
|
static FILE *
|
||||||
|
open_data(const uint8_t *data, size_t size)
|
||||||
|
{
|
||||||
|
#ifdef HAVE_FMEMOPEN
|
||||||
|
/* Operate in-memory. */
|
||||||
|
return fmemopen((void *)data, size, "r");
|
||||||
|
#else
|
||||||
|
char tempfile[] = "/tmp/sudoers.XXXXXX";
|
||||||
|
size_t nwritten;
|
||||||
|
int fd;
|
||||||
|
|
||||||
|
/* Use (unlinked) temporary file. */
|
||||||
|
fd = mkstemp(tempfile);
|
||||||
|
if (fd == -1)
|
||||||
|
return NULL;
|
||||||
|
unlink(tempfile);
|
||||||
|
nwritten = write(fd, data, size);
|
||||||
|
if (nwritten != size) {
|
||||||
|
close(fd);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
lseek(fd, 0, SEEK_SET);
|
||||||
|
return fdopen(fd, "r");
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
|
||||||
{
|
{
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
|
|
||||||
@@ -51,8 +78,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
|
|||||||
if (size < 5)
|
if (size < 5)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
/* Operate in-memory. */
|
fp = open_data(data, size);
|
||||||
fp = fmemopen((void *)data, size, "r");
|
|
||||||
if (fp == NULL)
|
if (fp == NULL)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
@@ -38,6 +38,32 @@ open_sudoers(const char *file, bool doedit, bool *keepopen)
|
|||||||
return fopen(file, "r");
|
return fopen(file, "r");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static FILE *
|
||||||
|
open_data(const uint8_t *data, size_t size)
|
||||||
|
{
|
||||||
|
#ifdef HAVE_FMEMOPEN
|
||||||
|
/* Operate in-memory. */
|
||||||
|
return fmemopen((void *)data, size, "r");
|
||||||
|
#else
|
||||||
|
char tempfile[] = "/tmp/ldif.XXXXXX";
|
||||||
|
size_t nwritten;
|
||||||
|
int fd;
|
||||||
|
|
||||||
|
/* Use (unlinked) temporary file. */
|
||||||
|
fd = mkstemp(tempfile);
|
||||||
|
if (fd == -1)
|
||||||
|
return NULL;
|
||||||
|
unlink(tempfile);
|
||||||
|
nwritten = write(fd, data, size);
|
||||||
|
if (nwritten != size) {
|
||||||
|
close(fd);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
lseek(fd, 0, SEEK_SET);
|
||||||
|
return fdopen(fd, "r");
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
|
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
|
||||||
{
|
{
|
||||||
struct sudoers_parse_tree parse_tree;
|
struct sudoers_parse_tree parse_tree;
|
||||||
@@ -47,8 +73,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
|
|||||||
if (size < 5)
|
if (size < 5)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
/* Operate in-memory. */
|
fp = open_data(data, size);
|
||||||
fp = fmemopen((void *)data, size, "r");
|
|
||||||
if (fp == NULL)
|
if (fp == NULL)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user