# Copyright 2015 syzkaller project authors. All rights reserved.
# Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file.

include <linux/random.h>

resource fd_random[fd]

openat$random(fd const[AT_FDCWD], file ptr[in, string["/dev/urandom"]], flags flags[open_flags], mode const[0]) fd_random
openat$urandom(fd const[AT_FDCWD], file ptr[in, string["/dev/urandom"]], flags flags[open_flags], mode const[0]) fd_random

ioctl$RNDGETENTCNT(fd fd_random, cmd const[RNDGETENTCNT], arg ptr[out, int32])
ioctl$RNDADDTOENTCNT(fd fd_random, cmd const[RNDADDTOENTCNT], arg ptr[in, int32])
ioctl$RNDADDENTROPY(fd fd_random, cmd const[RNDADDENTROPY], arg ptr[in, rnd_entpropy])
ioctl$RNDZAPENTCNT(fd fd_random, cmd const[RNDZAPENTCNT], arg ptr[in, int32])
ioctl$RNDCLEARPOOL(fd fd_random, cmd const[RNDCLEARPOOL], arg ptr[in, int32])

rnd_entpropy {
	entcnt	int32
	size	len[pool, int32]
	pool	array[int8]
}
