Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
btwise
openssl
提交
7c517a04
O
openssl
项目概览
btwise
/
openssl
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
O
openssl
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
7c517a04
编写于
12月 20, 2001
作者:
B
Ben Laurie
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Security fix.
上级
d78e5298
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
20 addition
and
22 deletion
+20
-22
CHANGES
CHANGES
+3
-0
crypto/ui/ui_openssl.c
crypto/ui/ui_openssl.c
+17
-22
未找到文件。
CHANGES
浏览文件 @
7c517a04
...
...
@@ -12,6 +12,9 @@
*) applies to 0.9.6a/0.9.6b/0.9.6c and 0.9.7
+) applies to 0.9.7 only
+) SECURITY: remove unsafe setjmp/signal interaction from ui_openssl.c.
[Ben Laurie and Theo de Raadt]
*) Fix BN_rand_range bug pointed out by Dominikus Scherkl
<Dominikus.Scherkl@biodata.com>. (The previous implementation
worked incorrectly for those cases where range = 10..._2 and
...
...
crypto/ui/ui_openssl.c
浏览文件 @
7c517a04
...
...
@@ -148,7 +148,6 @@
#include <signal.h>
#include <stdio.h>
#include <string.h>
#include <setjmp.h>
#include <errno.h>
#ifdef OPENSSL_SYS_VMS
/* prototypes for sys$whatever */
...
...
@@ -256,7 +255,6 @@ static struct sigaction savsig[NX509_SIG];
#else
static
void
(
*
savsig
[
NX509_SIG
])(
int
);
#endif
static
jmp_buf
save
;
#ifdef OPENSSL_SYS_VMS
static
struct
IOSB
iosb
;
...
...
@@ -374,6 +372,8 @@ static void read_till_nl(FILE *in)
}
while
(
strchr
(
buf
,
'\n'
)
==
NULL
);
}
static
sig_atomic_t
intr_signal
;
static
int
read_string_inner
(
UI
*
ui
,
UI_STRING
*
uis
,
int
echo
,
int
strip_nl
)
{
static
int
ps
;
...
...
@@ -383,29 +383,31 @@ static int read_string_inner(UI *ui, UI_STRING *uis, int echo, int strip_nl)
char
*
p
;
#ifndef OPENSSL_SYS_WIN16
if
((
ok
=
setjmp
(
save
)))
{
if
(
ok
==
1
)
ok
=
0
;
goto
error
;
}
intr_signal
=
0
;
ok
=
0
;
ps
=
0
;
pushsig
();
ps
=
1
;
if
(
!
echo
)
noecho_console
(
ui
);
if
(
!
echo
&&
!
noecho_console
(
ui
))
goto
error
;
ps
=
2
;
result
[
0
]
=
'\0'
;
#ifdef OPENSSL_SYS_MSDOS
if
(
!
echo
)
{
noecho_fgets
(
result
,
maxsize
,
tty_in
);
p
=
result
;
/* FIXME: noecho_fgets doesn't return errors */
}
else
fgets
(
result
,
maxsize
,
tty_in
);
p
=
fgets
(
result
,
maxsize
,
tty_in
);
#else
fgets
(
result
,
maxsize
,
tty_in
);
p
=
fgets
(
result
,
maxsize
,
tty_in
);
#endif
if
(
!
p
)
goto
error
;
if
(
feof
(
tty_in
))
goto
error
;
if
(
ferror
(
tty_in
))
goto
error
;
if
((
p
=
(
char
*
)
strchr
(
result
,
'\n'
))
!=
NULL
)
...
...
@@ -419,9 +421,11 @@ static int read_string_inner(UI *ui, UI_STRING *uis, int echo, int strip_nl)
ok
=
1
;
error:
if
(
intr_signal
==
SIGINT
)
ok
=-
1
;
if
(
!
echo
)
fprintf
(
tty_out
,
"
\n
"
);
if
(
ps
>=
2
&&
!
echo
)
echo_console
(
ui
)
;
if
(
ps
>=
2
&&
!
echo
&&
!
echo_console
(
ui
)
)
ok
=
0
;
if
(
ps
>=
1
)
popsig
();
...
...
@@ -602,18 +606,9 @@ static void popsig(void)
static
void
recsig
(
int
i
)
{
switch
(
i
)
{
case
SIGINT
:
longjmp
(
save
,
-
1
);
break
;
default:
break
;
}
longjmp
(
save
,
1
);
intr_signal
=
i
;
}
/* Internal functions specific for Windows */
#if defined(OPENSSL_SYS_MSDOS) && !defined(OPENSSL_SYS_WIN16)
static
int
noecho_fgets
(
char
*
buf
,
int
size
,
FILE
*
tty
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录