设为首页 收藏本站
查看: 556|回复: 0

[经验分享] openssl库函数使用中的SSL_shutdown、SSL_free不能同时使用

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-4-27 09:13:59 | 显示全部楼层 |阅读模式
                      openssl库函数中提供了两个销毁ssl连接通道的函数:SSL_shutdown、SSL_free,作用相同,二者取其一,不可同时使用,否则就会出现两次销毁对象的报错。

请看下面一个代码片段:
......
if (SSL_shutdown(ssl) != 1)
{
        close(sfd);
        printf("ssl shutdown failed\n");
}
SSL_free(ssl);
......

使用-lssl参数编译可以成功,但在运行时,会概率性出现double free or corruption的报错,就是销毁一个已经销毁的对象。详细的报错信息类似于:
root@xubuntu:/home# ./s
*** glibc detected *** ./s: double free or corruption (!prev): 0x095c0f60 ***
======= Backtrace: =========
/lib/i386-linux-gnu/libc.so.6(+0x75ee2)[0x251ee2]
/lib/i386-linux-gnu/libcrypto.so.1.0.0(CRYPTO_free+0x3a)[0x3bf95a]
/lib/i386-linux-gnu/libcrypto.so.1.0.0(BIO_free+0xe0)[0x430610]
/lib/i386-linux-gnu/libcrypto.so.1.0.0(BIO_free_all+0x34)[0x431194]
/lib/i386-linux-gnu/libssl.so.1.0.0(SSL_set_bio+0x49)[0x889d79]
/lib/i386-linux-gnu/libssl.so.1.0.0(SSL_set_fd+0x57)[0x889f17]
./s[0x8048aee]
/lib/i386-linux-gnu/libpthread.so.0(+0x6d4c)[0xb93d4c]
/lib/i386-linux-gnu/libc.so.6(clone+0x5e)[0x2cbbae]
======= Memory map: ========
00110000-00124000 r-xp 00000000 08:02 4893       /lib/i386-linux-gnu/libz.so.1.2.3.4
00124000-00125000 r--p 00013000 08:02 4893       /lib/i386-linux-gnu/libz.so.1.2.3.4
00125000-00126000 rw-p 00014000 08:02 4893       /lib/i386-linux-gnu/libz.so.1.2.3.4
00126000-00142000 r-xp 00000000 08:02 760        /lib/i386-linux-gnu/libgcc_s.so.1
00142000-00143000 r--p 0001b000 08:02 760        /lib/i386-linux-gnu/libgcc_s.so.1
00143000-00144000 rw-p 0001c000 08:02 760        /lib/i386-linux-gnu/libgcc_s.so.1
001dc000-00380000 r-xp 00000000 08:02 3232       /lib/i386-linux-gnu/libc-2.15.so
00380000-00382000 r--p 001a4000 08:02 3232       /lib/i386-linux-gnu/libc-2.15.so
00382000-00383000 rw-p 001a6000 08:02 3232       /lib/i386-linux-gnu/libc-2.15.so
00383000-00386000 rw-p 00000000 00:00 0
00386000-00519000 r-xp 00000000 08:02 5861       /lib/i386-linux-gnu/libcrypto.so.1.0.0
00519000-00528000 r--p 00193000 08:02 5861       /lib/i386-linux-gnu/libcrypto.so.1.0.0
00528000-0052f000 rw-p 001a2000 08:02 5861       /lib/i386-linux-gnu/libcrypto.so.1.0.0
0052f000-00532000 rw-p 00000000 00:00 0
00759000-0075c000 r-xp 00000000 08:02 3231       /lib/i386-linux-gnu/libdl-2.15.so
0075c000-0075d000 r--p 00002000 08:02 3231       /lib/i386-linux-gnu/libdl-2.15.so
0075d000-0075e000 rw-p 00003000 08:02 3231       /lib/i386-linux-gnu/libdl-2.15.so
00858000-008a9000 r-xp 00000000 08:02 5862       /lib/i386-linux-gnu/libssl.so.1.0.0
008a9000-008ab000 r--p 00051000 08:02 5862       /lib/i386-linux-gnu/libssl.so.1.0.0
008ab000-008af000 rw-p 00053000 08:02 5862       /lib/i386-linux-gnu/libssl.so.1.0.0
00af6000-00b16000 r-xp 00000000 08:02 3222       /lib/i386-linux-gnu/ld-2.15.so
00b16000-00b17000 r--p 0001f000 08:02 3222       /lib/i386-linux-gnu/ld-2.15.so
00b17000-00b18000 rw-p 00020000 08:02 3222       /lib/i386-linux-gnu/ld-2.15.so
00b8d000-00ba4000 r-xp 00000000 08:02 3221       /lib/i386-linux-gnu/libpthread-2.15.so
00ba4000-00ba5000 r--p 00016000 08:02 3221       /lib/i386-linux-gnu/libpthread-2.15.so
00ba5000-00ba6000 rw-p 00017000 08:02 3221       /lib/i386-linux-gnu/libpthread-2.15.so
00ba6000-00ba8000 rw-p 00000000 00:00 0
00fed000-00fee000 r-xp 00000000 00:00 0          [vdso]
08048000-0804a000 r-xp 00000000 08:02 260187     /home/s
0804a000-0804b000 r--p 00001000 08:02 260187     /home/s
0804b000-0804c000 rw-p 00002000 08:02 260187     /home/s
095b3000-095d4000 rw-p 00000000 00:00 0          [heap]
b4c00000-b4c21000 rw-p 00000000 00:00 0
b4c21000-b4d00000 ---p 00000000 00:00 0
b4e00000-b4e21000 rw-p 00000000 00:00 0
b4e21000-b4f00000 ---p 00000000 00:00 0
b4f52000-b4f53000 ---p 00000000 00:00 0
b4f53000-b5753000 rw-p 00000000 00:00 0
b5753000-b5754000 ---p 00000000 00:00 0
b5754000-b5f54000 rw-p 00000000 00:00 0
b5f54000-b5f55000 ---p 00000000 00:00 0
b5f55000-b6755000 rw-p 00000000 00:00 0
b6755000-b6756000 ---p 00000000 00:00 0
b6756000-b6f56000 rw-p 00000000 00:00 0
b6f56000-b6f57000 ---p 00000000 00:00 0
b6f57000-b775a000 rw-p 00000000 00:00 0
b7763000-b7766000 rw-p 00000000 00:00 0
bf89e000-bf8bf000 rw-p 00000000 00:00 0          [stack]
Aborted


这两个函数使用其中任意一个都可以,但不可同时使用。
                   


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-61015-1-1.html 上篇帖子: 加密、解密,以及OpenSSL建立私有CA 下篇帖子: PXE+KickStart+Nginx(http)+DHCP无人值守安装Centos6.6系统
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表