Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
kernel_linux
提交
c9df6025
K
kernel_linux
项目概览
OpenHarmony
/
kernel_linux
上一次同步 4 年多
通知
15
Star
8
Fork
2
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
kernel_linux
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
c9df6025
编写于
12月 27, 2016
作者:
A
Al Viro
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
alpha: kill the 'segment' argument of __access_ok()
always equal to get_fs(). Signed-off-by:
N
Al Viro
<
viro@zeniv.linux.org.uk
>
上级
f14d6b4f
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
41 addition
and
41 deletion
+41
-41
arch/alpha/include/asm/uaccess.h
arch/alpha/include/asm/uaccess.h
+41
-41
未找到文件。
arch/alpha/include/asm/uaccess.h
浏览文件 @
c9df6025
...
...
@@ -32,13 +32,13 @@
* - AND "addr+size" doesn't have any high-bits set
* - OR we are in kernel mode.
*/
#define __access_ok(addr, size
, segment
) \
((
(segment
).seg & (addr | size | (addr+size))) == 0)
#define __access_ok(addr, size) \
((
get_fs(
).seg & (addr | size | (addr+size))) == 0)
#define access_ok(type, addr, size)
\
({
\
__chk_user_ptr(addr);
\
__access_ok(((unsigned long)(addr)), (size)
, get_fs()
); \
#define access_ok(type, addr, size) \
({ \
__chk_user_ptr(addr); \
__access_ok(((unsigned long)(addr)), (size)); \
})
/*
...
...
@@ -93,23 +93,23 @@ extern void __get_user_unknown(void);
__gu_err; \
})
#define __get_user_check(x, ptr, size)
\
({
\
long __gu_err = -EFAULT;
\
unsigned long __gu_val = 0;
\
const __typeof__(*(ptr)) __user *__gu_addr = (ptr);
\
if (__access_ok((unsigned long)__gu_addr, size
, get_fs()
)) { \
__gu_err = 0;
\
switch (size) {
\
case 1: __get_user_8(__gu_addr); break;
\
case 2: __get_user_16(__gu_addr); break;
\
case 4: __get_user_32(__gu_addr); break;
\
case 8: __get_user_64(__gu_addr); break;
\
default: __get_user_unknown(); break;
\
}
\
}
\
(x) = (__force __typeof__(*(ptr))) __gu_val;
\
__gu_err;
\
#define __get_user_check(x, ptr, size) \
({ \
long __gu_err = -EFAULT; \
unsigned long __gu_val = 0; \
const __typeof__(*(ptr)) __user *__gu_addr = (ptr); \
if (__access_ok((unsigned long)__gu_addr, size)) { \
__gu_err = 0; \
switch (size) { \
case 1: __get_user_8(__gu_addr); break; \
case 2: __get_user_16(__gu_addr); break; \
case 4: __get_user_32(__gu_addr); break; \
case 8: __get_user_64(__gu_addr); break; \
default: __get_user_unknown(); break; \
} \
} \
(x) = (__force __typeof__(*(ptr))) __gu_val; \
__gu_err; \
})
struct
__large_struct
{
unsigned
long
buf
[
100
];
};
...
...
@@ -208,21 +208,21 @@ extern void __put_user_unknown(void);
__pu_err; \
})
#define __put_user_check(x, ptr, size)
\
({
\
long __pu_err = -EFAULT;
\
__typeof__(*(ptr)) __user *__pu_addr = (ptr);
\
if (__access_ok((unsigned long)__pu_addr, size
, get_fs()
)) { \
__pu_err = 0;
\
switch (size) {
\
case 1: __put_user_8(x, __pu_addr); break;
\
case 2: __put_user_16(x, __pu_addr); break;
\
case 4: __put_user_32(x, __pu_addr); break;
\
case 8: __put_user_64(x, __pu_addr); break;
\
default: __put_user_unknown(); break;
\
}
\
}
\
__pu_err;
\
#define __put_user_check(x, ptr, size) \
({ \
long __pu_err = -EFAULT; \
__typeof__(*(ptr)) __user *__pu_addr = (ptr); \
if (__access_ok((unsigned long)__pu_addr, size)) { \
__pu_err = 0; \
switch (size) { \
case 1: __put_user_8(x, __pu_addr); break; \
case 2: __put_user_16(x, __pu_addr); break; \
case 4: __put_user_32(x, __pu_addr); break; \
case 8: __put_user_64(x, __pu_addr); break; \
default: __put_user_unknown(); break; \
} \
} \
__pu_err; \
})
/*
...
...
@@ -353,7 +353,7 @@ extern long __copy_user(void *to, const void *from, long len);
extern
inline
long
copy_to_user
(
void
__user
*
to
,
const
void
*
from
,
long
n
)
{
if
(
likely
(
__access_ok
((
unsigned
long
)
to
,
n
,
get_fs
()
)))
if
(
likely
(
__access_ok
((
unsigned
long
)
to
,
n
)))
n
=
__copy_user
((
__force
void
*
)
to
,
from
,
n
);
return
n
;
}
...
...
@@ -362,7 +362,7 @@ extern inline long
copy_from_user
(
void
*
to
,
const
void
__user
*
from
,
long
n
)
{
long
res
=
n
;
if
(
likely
(
__access_ok
((
unsigned
long
)
from
,
n
,
get_fs
()
)))
if
(
likely
(
__access_ok
((
unsigned
long
)
from
,
n
)))
res
=
__copy_from_user_inatomic
(
to
,
from
,
n
);
if
(
unlikely
(
res
))
memset
(
to
+
(
n
-
res
),
0
,
res
);
...
...
@@ -374,7 +374,7 @@ extern long __clear_user(void __user *to, long len);
extern
inline
long
clear_user
(
void
__user
*
to
,
long
len
)
{
if
(
__access_ok
((
unsigned
long
)
to
,
len
,
get_fs
()
))
if
(
__access_ok
((
unsigned
long
)
to
,
len
))
len
=
__clear_user
(
to
,
len
);
return
len
;
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录