码迷,mamicode.com
首页 > 其他好文 > 详细

openssl库函数使用中的SSL_shutdown、SSL_free不能同时使用

时间:2015-04-26 01:29:11      阅读:284      评论:0      收藏:0      [点我收藏+]

标签:c   openssl   

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



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

openssl库函数使用中的SSL_shutdown、SSL_free不能同时使用

标签:c   openssl   

原文地址:http://artinfo.blog.51cto.com/10067034/1638387

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!