Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
gsplhtlxg
clone-Linux
提交
1b3bce4d
C
clone-Linux
项目概览
gsplhtlxg
/
clone-Linux
通知
2
Star
0
Fork
1
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
C
clone-Linux
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
1b3bce4d
编写于
9月 29, 2017
作者:
A
Al Viro
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
VT_RESIZEX: get rid of field-by-field copyin
Signed-off-by:
N
Al Viro
<
viro@zeniv.linux.org.uk
>
上级
7d5cb456
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
27 addition
and
41 deletion
+27
-41
drivers/tty/vt/vt_ioctl.c
drivers/tty/vt/vt_ioctl.c
+27
-41
未找到文件。
drivers/tty/vt/vt_ioctl.c
浏览文件 @
1b3bce4d
...
...
@@ -842,58 +842,44 @@ int vt_ioctl(struct tty_struct *tty,
case
VT_RESIZEX
:
{
struct
vt_consize
__user
*
vtconsize
=
up
;
ushort
ll
,
cc
,
vlin
,
clin
,
vcol
,
ccol
;
struct
vt_consize
v
;
if
(
!
perm
)
return
-
EPERM
;
if
(
!
access_ok
(
VERIFY_READ
,
vtconsize
,
sizeof
(
struct
vt_consize
)))
{
ret
=
-
EFAULT
;
break
;
}
if
(
copy_from_user
(
&
v
,
up
,
sizeof
(
struct
vt_consize
)))
return
-
EFAULT
;
/* FIXME: Should check the copies properly */
__get_user
(
ll
,
&
vtconsize
->
v_rows
);
__get_user
(
cc
,
&
vtconsize
->
v_cols
);
__get_user
(
vlin
,
&
vtconsize
->
v_vlin
);
__get_user
(
clin
,
&
vtconsize
->
v_clin
);
__get_user
(
vcol
,
&
vtconsize
->
v_vcol
);
__get_user
(
ccol
,
&
vtconsize
->
v_ccol
);
vlin
=
vlin
?
vlin
:
vc
->
vc_scan_lines
;
if
(
clin
)
{
if
(
ll
)
{
if
(
ll
!=
vlin
/
clin
)
{
/* Parameters don't add up */
ret
=
-
EINVAL
;
break
;
}
}
else
ll
=
vlin
/
clin
;
if
(
!
v
.
v_vlin
)
v
.
v_vlin
=
vc
->
vc_scan_lines
;
if
(
v
.
v_clin
)
{
int
rows
=
v
.
v_vlin
/
v
.
v_clin
;
if
(
v
.
v_rows
!=
rows
)
{
if
(
v
.
v_rows
)
/* Parameters don't add up */
return
-
EINVAL
;
v
.
v_rows
=
rows
;
}
}
if
(
vcol
&&
ccol
)
{
if
(
cc
)
{
if
(
cc
!=
vcol
/
ccol
)
{
ret
=
-
EINVAL
;
break
;
}
}
else
cc
=
vcol
/
ccol
;
if
(
v
.
v_vcol
&&
v
.
v_ccol
)
{
int
cols
=
v
.
v_vcol
/
v
.
v_ccol
;
if
(
v
.
v_cols
!=
cols
)
{
if
(
v
.
v_cols
)
return
-
EINVAL
;
v
.
v_cols
=
cols
;
}
}
if
(
clin
>
32
)
{
ret
=
-
EINVAL
;
break
;
}
if
(
v
.
v_clin
>
32
)
return
-
EINVAL
;
for
(
i
=
0
;
i
<
MAX_NR_CONSOLES
;
i
++
)
{
if
(
!
vc_cons
[
i
].
d
)
continue
;
console_lock
();
if
(
vlin
)
vc_cons
[
i
].
d
->
vc_scan_lines
=
vlin
;
if
(
clin
)
vc_cons
[
i
].
d
->
vc_font
.
height
=
clin
;
if
(
v
.
v_v
lin
)
vc_cons
[
i
].
d
->
vc_scan_lines
=
v
.
v_v
lin
;
if
(
v
.
v_
clin
)
vc_cons
[
i
].
d
->
vc_font
.
height
=
v
.
v_
clin
;
vc_cons
[
i
].
d
->
vc_resize_user
=
1
;
vc_resize
(
vc_cons
[
i
].
d
,
cc
,
ll
);
vc_resize
(
vc_cons
[
i
].
d
,
v
.
v_cols
,
v
.
v_rows
);
console_unlock
();
}
break
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录