[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Minios-devel] [UNIKRAFT PATCH 1/1] lib/ukswrand: Add /dev/random and /dev/urandom
Hey Yuri, Thanks for the review. I'll add the proposed changes in the v2. On 4/23/19 3:51 PM, Yuri Volchkov wrote: > Hi Vlad, > > "Vlad-Andrei BĂDOIU (78692)" <vlad_andrei.badoiu@xxxxxxxxxxxxxxx> > writes: > >> This patch adds the /dev/random and >> /dev/urandom devices. Since we >> do not currenly have any entropy generating >> function they share the same handlers. The >> registration of the devices is guarded >> by the config option CONFIG_DEV_RANDOM. >> >> The devfs patch series is required. >> >> Signed-off-by: Vlad-Andrei Badoiu <vlad_andrei.badoiu@xxxxxxxxxxxxxxx> >> --- >> lib/ukswrand/Config.uk | 5 ++++ >> lib/ukswrand/mwc.c | 65 ++++++++++++++++++++++++++++++++++++++++++ >> 2 files changed, 70 insertions(+) >> >> diff --git a/lib/ukswrand/Config.uk b/lib/ukswrand/Config.uk >> index 44f6ee50..d694b61d 100644 >> --- a/lib/ukswrand/Config.uk >> +++ b/lib/ukswrand/Config.uk >> @@ -14,6 +14,11 @@ config LIBUKSWRAND_MWC >> Use multiply-with-carry algorithm >> endchoice >> >> + >> +config DEV_RANDOM >> + bool "/dev/random device" >> + select LIBDEVFS >> + >> config LIBUKSWRAND_INITIALSEED >> int "Initial random seed" >> default 23 >> diff --git a/lib/ukswrand/mwc.c b/lib/ukswrand/mwc.c >> index 199247d3..a276d657 100644 >> --- a/lib/ukswrand/mwc.c >> +++ b/lib/ukswrand/mwc.c >> @@ -37,6 +37,7 @@ >> #include <uk/print.h> >> #include <uk/assert.h> >> #include <uk/ctors.h> >> +#include <uk/config.h> >> >> /* >> https://stackoverflow.com/questions/9492581/c-random-number-generation-pure-c-code-no-libraries-or-functions >> */ >> #define PHI 0x9e3779b9 >> @@ -97,3 +98,67 @@ static void _uk_swrand_ctor(void) >> } >> >> UK_CTOR_FUNC(UK_SWRAND_CTOR_PRIO, _uk_swrand_ctor); >> + >> +#ifdef CONFIG_DEV_RANDOM >> + >> +#include <vfscore/device.h> >> +#include <vfscore/uio.h> >> +#include <stdlib.h> >> + >> +static const char dev_name[] = "urandom"; >> + >> +int dev_random_read(struct device *dev, struct uio *uio, int flags) >> +{ >> + char *buf; >> + size_t count; >> + >> + buf = uio->uio_iov->iov_base; >> + count = uio->uio_iov->iov_len; > It can be multiple vectors here. At least add assertion. But better to > iterate all of them. > >> + >> + for (int i = 0; i < count; ++i) >> + buf[i] = uk_swrand_randr_r(&uk_swrand_def); > The uk_swrand_randr_r gives you 4 bytes, only one of them is used. I > think this inefficiency needs fixing. > >> + >> + uio->uio_resid = 0; >> + return 0; >> +} >> + >> +int dev_random_open(const char *c, int i, struct device **dev) >> +{ >> + return 0; >> +} >> + >> + >> +int dev_random_close(const char *c, int i, struct device **dev) >> +{ >> + return 0; >> +} >> + >> +static struct devops random_devops = { >> + .read = dev_random_read, >> + .open = dev_random_open, >> + .close = dev_random_close, >> +}; >> + >> +static struct driver drv = { >> + .devops = &random_devops, >> + .devsz = 0, >> + .name = dev_name >> +}; >> + >> +__constructor_prio(102) static void _uk_dev_swrand_ctor(void) >> +{ >> + struct device *dev; >> + >> + uk_pr_info("Add /dev/random and /dev/urandom\n"); > Sounds more like uk_pr_debug to me > >> + >> + /* register /dev/urandom */ >> + dev = device_create(&drv, dev_name, D_CHR); >> + if (dev == NULL) >> + uk_pr_info("Failed to register /dev/urandom\n"); >> + >> + /* register /dev/random */ >> + dev = device_create(&drv, dev_name + 1, D_CHR); >> + if (dev == NULL) >> + uk_pr_info("Failed to register /dev/random\n"); >> +} >> +#endif >> -- >> 2.20.1 >> _______________________________________________ Minios-devel mailing list Minios-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/minios-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |