Uh oh!
There was an error while loading. Please reload this page.
Conversation
BaoshanPang
commented
Aug 14, 2019
Thanks for working this, I am actually looking for the way to port rand for vxWorks with latest version, the layout of version 0.7.0 is quiet different than 0.6.1 which we have ported for. I don't see any problem with the code, it is good to me. Can you teach me how to test it for vxWorks? I am seeing rand 0.6.1(and 0.6.5) is used when runing rust libstd unit test, but I can't figure out where/how rand 0.7.0 is used. Thanks, |
newpavlov
commented
Aug 14, 2019
If I understood you correctly, then you don't have to do anything. Assuming this PR is correct, after publishing the next version of
|
BaoshanPang
commented
Aug 14, 2019
|
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
newpavlov
commented
Aug 14, 2019
n-salim
commented
Aug 14, 2019
|
newpavlov
commented
Aug 14, 2019
How about adding |
BaoshanPang
commented
Aug 14, 2019
I will do it as part of libc#1469. |
BaoshanPang
commented
Aug 17, 2019
I just built the latest rust code , although there are both rand 0.7 and rand 0.6.1 listed in Cargo.lock, but the rand used is still 0.6.1 when building libstd unit test: $ ./x.py test -i --stage 1 src/libstd |
Some update for vxWorks This is to address issues: #1469 and rust-random/getrandom#86 (comment) What have been changed in this PR: 1. adding randBytes(), randABytes(), randUBytes(), randSecure() and taskDelay() 2. change armv7-wrs-vxworks to armv7-wrs-vxworks-eabihf 3. code cleanup
Some update for vxWorks This is to address issues: #1469 and rust-random/getrandom#86 (comment) What have been changed in this PR: 1. adding randBytes(), randABytes(), randUBytes(), randSecure() and taskDelay() 2. change armv7-wrs-vxworks to armv7-wrs-vxworks-eabihf 3. code cleanup
josephlr
left a comment
There was a problem hiding this comment.
The basic gist of this looks good, just a few things to prevent some build issues.
I'm not sure if you need to rebase onto latest master (I guess it couldn't hurt).
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
| static RNG_INIT: AtomicBool = AtomicBool::new(false); | ||
| pub fn getrandom_inner(dest: &mut [u8]) -> Result<(), Error> { | ||
| while !RNG_INIT.load(Relaxed) { |
There was a problem hiding this comment.
We should use LazyBool here, something like:
fnrng_init() -> bool{loop{let ret = unsafe{ libc::randSecure()}if ret != 0{return ret > 0;}unsafe{ libc::usleep(10)};}}pubfn getrandom_inner(dest:&mut[u8]) -> Result<(),Error>{staticRNG_INIT:LazyBool = LazyBool::new();if !RNG_INIT.unsync_init(rng_init){returnErr(RAND_SECURE_FATAL);}// Prevent overflow of i32
...You could also use a lambda, if you think it would look better.
There was a problem hiding this comment.
@BaoshanPang@n-salim
Is it possible for the system to recover after randSecure failure or can we assume that once it has failed it will always fail?
There was a problem hiding this comment.
Yes, the system can recover after randSecure failure. This is the randSecure's function desciption:
- randSecure - determine if state is secure
- This routine determines if state is secure and returns status.
- When the system boots, the SW random number lib contains no entropy. Once
- enough entropy has been collected in order to make the random numbers
- cryptographically secure, the state is considered to be secure.
- It will make a system call to a kernel side handler.
- RETURNS: 1 if the state is secure, 0 if the state is not secure, ERROR if
- the random number generator module is not initialized.
- ERRNOS: N/A
There was a problem hiding this comment.
"ERROR if the random number generator module is not initialized."
If I'm understanding this right, the RNG module might not be initialized, but it could become initialized later?
If that's the case, the current code looks good to me.
Uh oh!
There was an error while loading. Please reload this page.
josephlr
left a comment
There was a problem hiding this comment.
Nice job @newpavlov for fixing this.
Uh oh!
There was an error while loading. Please reload this page.
| static RNG_INIT: AtomicBool = AtomicBool::new(false); | ||
| pub fn getrandom_inner(dest: &mut [u8]) -> Result<(), Error> { | ||
| while !RNG_INIT.load(Relaxed) { |
There was a problem hiding this comment.
"ERROR if the random number generator module is not initialized."
If I'm understanding this right, the RNG module might not be initialized, but it could become initialized later?
If that's the case, the current code looks good to me.
I couldn't find a proper documentation for VxWorks, so I've mostly just copied code from
std.Relevant issue: openssl/openssl#7946
This PR will not work until rust-lang/libc#1473 lands.
cc @bpangWR@BaoshanPang