diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib/libcrypto/rand/randfile.c | 22 | ||||
| -rw-r--r-- | src/lib/libssl/src/crypto/rand/randfile.c | 22 |
2 files changed, 26 insertions, 18 deletions
diff --git a/src/lib/libcrypto/rand/randfile.c b/src/lib/libcrypto/rand/randfile.c index 2ffb84c89e..c4eb79ac5f 100644 --- a/src/lib/libcrypto/rand/randfile.c +++ b/src/lib/libcrypto/rand/randfile.c | |||
| @@ -219,7 +219,7 @@ err: | |||
| 219 | const char *RAND_file_name(char *buf, size_t size) | 219 | const char *RAND_file_name(char *buf, size_t size) |
| 220 | { | 220 | { |
| 221 | char *s = NULL; | 221 | char *s = NULL; |
| 222 | char *ret=NULL; | 222 | int ok = 0; |
| 223 | struct stat sb; | 223 | struct stat sb; |
| 224 | 224 | ||
| 225 | if (issetugid() == 0) | 225 | if (issetugid() == 0) |
| @@ -227,7 +227,7 @@ const char *RAND_file_name(char *buf, size_t size) | |||
| 227 | if (s != NULL && *s && strlen(s) + 1 < size) | 227 | if (s != NULL && *s && strlen(s) + 1 < size) |
| 228 | { | 228 | { |
| 229 | strlcpy(buf,s,size); | 229 | strlcpy(buf,s,size); |
| 230 | ret=buf; | 230 | ok = 1; |
| 231 | } | 231 | } |
| 232 | else | 232 | else |
| 233 | { | 233 | { |
| @@ -246,7 +246,7 @@ const char *RAND_file_name(char *buf, size_t size) | |||
| 246 | strcat(buf,"/"); | 246 | strcat(buf,"/"); |
| 247 | #endif | 247 | #endif |
| 248 | strlcat(buf,RFILE,size); | 248 | strlcat(buf,RFILE,size); |
| 249 | ret=buf; | 249 | ok = 1; |
| 250 | } | 250 | } |
| 251 | else | 251 | else |
| 252 | buf[0] = '\0'; /* no file name */ | 252 | buf[0] = '\0'; /* no file name */ |
| @@ -255,17 +255,21 @@ const char *RAND_file_name(char *buf, size_t size) | |||
| 255 | #ifdef DEVRANDOM | 255 | #ifdef DEVRANDOM |
| 256 | /* given that all random loads just fail if the file can't be | 256 | /* given that all random loads just fail if the file can't be |
| 257 | * seen on a stat, we stat the file we're returning, if it | 257 | * seen on a stat, we stat the file we're returning, if it |
| 258 | * fails, use DEVRANDOM instead. the allows the user to | 258 | * fails, use DEVRANDOM instead. this allows the user to |
| 259 | * use their own source for good random data, but defaults | 259 | * use their own source for good random data, but defaults |
| 260 | * to something hopefully decent if that isn't available. | 260 | * to something hopefully decent if that isn't available. |
| 261 | */ | 261 | */ |
| 262 | 262 | ||
| 263 | if (ret == NULL) | 263 | if (!ok) |
| 264 | ret = DEVRANDOM; | 264 | if (strlcpy(buf,DEVRANDOM,size) >= size) { |
| 265 | return(NULL); | ||
| 266 | } | ||
| 267 | if (stat(buf,&sb) == -1) | ||
| 268 | if (strlcpy(buf,DEVRANDOM,size) >= size) { | ||
| 269 | return(NULL); | ||
| 270 | } | ||
| 265 | 271 | ||
| 266 | if (stat(ret,&sb) == -1) | ||
| 267 | ret = DEVRANDOM; | ||
| 268 | #endif | 272 | #endif |
| 269 | return(ret); | 273 | return(buf); |
| 270 | } | 274 | } |
| 271 | 275 | ||
diff --git a/src/lib/libssl/src/crypto/rand/randfile.c b/src/lib/libssl/src/crypto/rand/randfile.c index 2ffb84c89e..c4eb79ac5f 100644 --- a/src/lib/libssl/src/crypto/rand/randfile.c +++ b/src/lib/libssl/src/crypto/rand/randfile.c | |||
| @@ -219,7 +219,7 @@ err: | |||
| 219 | const char *RAND_file_name(char *buf, size_t size) | 219 | const char *RAND_file_name(char *buf, size_t size) |
| 220 | { | 220 | { |
| 221 | char *s = NULL; | 221 | char *s = NULL; |
| 222 | char *ret=NULL; | 222 | int ok = 0; |
| 223 | struct stat sb; | 223 | struct stat sb; |
| 224 | 224 | ||
| 225 | if (issetugid() == 0) | 225 | if (issetugid() == 0) |
| @@ -227,7 +227,7 @@ const char *RAND_file_name(char *buf, size_t size) | |||
| 227 | if (s != NULL && *s && strlen(s) + 1 < size) | 227 | if (s != NULL && *s && strlen(s) + 1 < size) |
| 228 | { | 228 | { |
| 229 | strlcpy(buf,s,size); | 229 | strlcpy(buf,s,size); |
| 230 | ret=buf; | 230 | ok = 1; |
| 231 | } | 231 | } |
| 232 | else | 232 | else |
| 233 | { | 233 | { |
| @@ -246,7 +246,7 @@ const char *RAND_file_name(char *buf, size_t size) | |||
| 246 | strcat(buf,"/"); | 246 | strcat(buf,"/"); |
| 247 | #endif | 247 | #endif |
| 248 | strlcat(buf,RFILE,size); | 248 | strlcat(buf,RFILE,size); |
| 249 | ret=buf; | 249 | ok = 1; |
| 250 | } | 250 | } |
| 251 | else | 251 | else |
| 252 | buf[0] = '\0'; /* no file name */ | 252 | buf[0] = '\0'; /* no file name */ |
| @@ -255,17 +255,21 @@ const char *RAND_file_name(char *buf, size_t size) | |||
| 255 | #ifdef DEVRANDOM | 255 | #ifdef DEVRANDOM |
| 256 | /* given that all random loads just fail if the file can't be | 256 | /* given that all random loads just fail if the file can't be |
| 257 | * seen on a stat, we stat the file we're returning, if it | 257 | * seen on a stat, we stat the file we're returning, if it |
| 258 | * fails, use DEVRANDOM instead. the allows the user to | 258 | * fails, use DEVRANDOM instead. this allows the user to |
| 259 | * use their own source for good random data, but defaults | 259 | * use their own source for good random data, but defaults |
| 260 | * to something hopefully decent if that isn't available. | 260 | * to something hopefully decent if that isn't available. |
| 261 | */ | 261 | */ |
| 262 | 262 | ||
| 263 | if (ret == NULL) | 263 | if (!ok) |
| 264 | ret = DEVRANDOM; | 264 | if (strlcpy(buf,DEVRANDOM,size) >= size) { |
| 265 | return(NULL); | ||
| 266 | } | ||
| 267 | if (stat(buf,&sb) == -1) | ||
| 268 | if (strlcpy(buf,DEVRANDOM,size) >= size) { | ||
| 269 | return(NULL); | ||
| 270 | } | ||
| 265 | 271 | ||
| 266 | if (stat(ret,&sb) == -1) | ||
| 267 | ret = DEVRANDOM; | ||
| 268 | #endif | 272 | #endif |
| 269 | return(ret); | 273 | return(buf); |
| 270 | } | 274 | } |
| 271 | 275 | ||
