2011-10-10 2 views
1

이것은 약간의 코드를 디버깅하는 동안 가상 일뿐입니다. 내가 같은 libcrypto lib를 통해 또 다른 TLS 소켓을 설정하고있는 다른 lib와 동시에 X가 암호화 된 SMTP 연결을 통해 전자 메일을 보내도록 lib (을)를 호출하는 응용 프로그램 (X라고 함) 하나의 함수 호출이 segfault로 실패하는 특정 (이상한) 조건을 얻게 될 가능성은 어느 정도입니까?Segfault with libssl/libcrypto

나는이 코드가 TLS를 통해 Skype 서버에 연결되는 Skype SDK를 추가 할 때까지 잘 돌아갔다. 이후로 우리는 실제로 반복 가능하도록 문제를 얻을 수 있지만 조금 이유에 대해 당황스러워했다. (나는 아마도 명백한 것을 간과 할 것이지만, 정말로 이상한 가능성으로 시작하겠다.)

+0

libcrypto가 여러 세션에서 손상되는지 묻는 중입니까? 나는 확실히 말할 수는 없지만 나는 그것을 의심한다. –

+0

그래, 내가 생각한 것,하지만 그럴 가치가 있다고 생각. 처음에는 어리석은 대답을 죽여라! –

답변

2

상당히 일반적인 말로는 가능할 수도 있지만, 잘 쓰여진 라이브러리는 다중 접근에 강해야한다. 그들의 API가 재진입 성 (또는 심지어 안전성)인지 문서를 살펴볼 수도 있습니다.

스레드 안전성이 있다면 (libcrypto 작성자가 실수하지 않았다고 가정하면) 문제의 원인이 아닌 것으로 확신 할 수 있습니다.

재진입 성있는 경우 두 개 이상의 스레드에서이 라이브러리를 사용하는 모든 항목은 액세스 할 때 (예 : 뮤텍스를 사용하여) 동기화해야하지만 코드 일부가 사용자가 작성하지 않고 수정할 수있는 옵션이없는 경우 그때 너는 붙어있다. 내가 생각할 수있는 유일한 것은 libcrypto의 다른 버전을 사용하는 것일 것이므로 시스템은 내부 구조의 또 다른 무관 한 인스턴스를 생성합니다. 이것은 추한 soultion이며 사용자 컴퓨터에서 이상하게 행동 할 수 있습니다.

+0

아, 그게 사실 나를 설명 할 수있는 방향으로 알려 줬어. 그것은 libssl이 전적으로 스레드로부터 안전하지 않다는 것을 암시하는 [http://horstr.blogspot.com/2008/04/on-libcurl-openssl-and-thread-safety.html] (이 블로그 포스트)에서 저를 지적했습니다. 이상한 것을 설명하기 시작할 수 있습니다. –

2

OpenSSL 라이브러리 및 스레드 사용에 대한 전적인 메뉴얼 페이지가 있습니다 : man 3 threads. 응용 프로그램에 OpenSSL 라이브러리를 사용하는 다중 스레드가있는 경우이 함수를 사용해야합니다.

+0

두 가지 답변을 모두 받아 들일 수 있기를 바랍니다. 감사합니다. –