gpt4 book ai didi

c - 为什么 PK11_GenerateRandom() 会返回错误 -8023?

转载 作者:太空宇宙 更新时间:2023-11-04 11:12:50 24 4
gpt4 key购买 nike

我正在通过 Internet 查找 PK11_GenerateRandom() 函数的源代码,以了解该函数为何会失败。我有一个程序可以完美地使用这个函数,但是当我们转移到一种新的 Linux 版本时,它在 fork 后失败了 (fork())由于我不认为 N​​SS 有问题,我怀疑我们做错了一些事情,这在旧版本的 Linux 中被忽视了,但在新版本中存在问题。

OpenSSL 包在“好”和“坏”服务器上是相同的:

OpenSSL 0.9.8e-fips-rhel5 01 Jul

但 NSS rpm 不同。‘好’有

nss-3.12.2.0-2.el5

bas有这个版本

nss-3.15.3-4.el5_10

“好”服务器使用相当过时的 Linux:

Linux GOOD 2.6.18-128.el5 #1 SMP Wed Jan 21 08:45:05 EST 2009 x86_64 x86_64 x86_64 GNU/Linux
Enterprise Linux Enterprise Linux Server release 5.3 (Carthage)
Red Hat Enterprise Linux Server release 5.3 (Tikanga)

“坏”服务器较新:

Linux BAD 2.6.18-371.4.1.el5 #1 SMP Wed Jan 29 11:05:49 PST 2014 x86_64 x86_64 x86_64 GNU/Linux
Oracle Linux Server release 5.10
Red Hat Enterprise Linux Server release 5.10 (Tikanga)

任何关于我在哪里可以找到源代码或失败原因的线索(例如来自 fork() 的副作用)将不胜感激。

  • 格雷格

编辑

这是代码,非常简单,我认为不需要它。

/* random points to properly allocated memory, let=32 */
SECStatus rv = PK11_GenerateRandom((unsigned char *)random, (int)len);
if ( rv != SECSuccess )
printf( "PK11_GenerateRandom error = %d\n", PR_GetError()) ;

当然,输出消息是:

PK11_GenerateRandom error = -8023
  • 格雷格

最佳答案

PK11_GenerateRandom() 函数的来源:http://mxr.mozilla.org/mozilla-central/source/security/nss/lib/pk11wrap/pk11slot.c#2285

根据我的计算,-8023 对应错误 SEC_ERROR_PKCS11_DEVICE_ERROR

这里描述了原因(感谢 jariq 的提示):https://bugzilla.mozilla.org/show_bug.cgi?id=331096

就是以前可以fork继续使用PKCS11的函数。他们决定不能那样做,现在的结论是,如果 fork 后的 child 要使用这些函数, parent 不应初始化这些函数。

PKCS11 内部函数正在检查是否存在 fork (它们根据构建代码的平台使用各种方法。)例如,它们将进程的 pid 存储在内部存储器中,并且在一些昂贵的函数中或不这样调用他们经常将这个保留的 pid 与当前的 getpid() 进行比较。

解决我们的问题需要重新设计代码。

关于c - 为什么 PK11_GenerateRandom() 会返回错误 -8023?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22303198/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com