Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
K
kernel
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
23
Issues
23
List
Boards
Labels
Service Desk
Milestones
Merge Requests
10
Merge Requests
10
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Incidents
Environments
Packages & Registries
Packages & Registries
Container Registry
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
redox-os
kernel
Commits
4c381070
Verified
Commit
4c381070
authored
Nov 16, 2018
by
Jeremy Soller
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add umask
parent
885fe7d0
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
25 additions
and
3 deletions
+25
-3
src/context/context.rs
src/context/context.rs
+3
-0
src/syscall/fs.rs
src/syscall/fs.rs
+4
-2
src/syscall/mod.rs
src/syscall/mod.rs
+1
-0
src/syscall/process.rs
src/syscall/process.rs
+16
-0
syscall
syscall
+1
-1
No files found.
src/context/context.rs
View file @
4c381070
...
...
@@ -109,6 +109,8 @@ pub struct Context {
pub
egid
:
u32
,
/// The effective namespace id
pub
ens
:
SchemeNamespace
,
/// Process umask
pub
umask
:
usize
,
/// Status of context
pub
status
:
Status
,
/// Context running or not
...
...
@@ -169,6 +171,7 @@ impl Context {
euid
:
0
,
egid
:
0
,
ens
:
SchemeNamespace
::
from
(
0
),
umask
:
0
o022
,
status
:
Status
::
Blocked
,
running
:
false
,
cpu_id
:
None
,
...
...
src/syscall/fs.rs
View file @
4c381070
...
...
@@ -85,13 +85,15 @@ pub fn getcwd(buf: &mut [u8]) -> Result<usize> {
/// Open syscall
pub
fn
open
(
path
:
&
[
u8
],
flags
:
usize
)
->
Result
<
FileHandle
>
{
let
(
path_canon
,
uid
,
gid
,
scheme_ns
)
=
{
let
(
path_canon
,
uid
,
gid
,
scheme_ns
,
umask
)
=
{
let
contexts
=
context
::
contexts
();
let
context_lock
=
contexts
.current
()
.ok_or
(
Error
::
new
(
ESRCH
))
?
;
let
context
=
context_lock
.read
();
(
context
.canonicalize
(
path
),
context
.euid
,
context
.egid
,
context
.ens
)
(
context
.canonicalize
(
path
),
context
.euid
,
context
.egid
,
context
.ens
,
context
.umask
)
};
let
flags
=
(
flags
&
(
!
0
o777
))
|
(
flags
&
0
o777
)
&
(
!
(
umask
&
0
o777
));
//println!("open {}", unsafe { ::core::str::from_utf8_unchecked(&path_canon) });
let
mut
parts
=
path_canon
.splitn
(
2
,
|
&
b
|
b
==
b
':'
);
...
...
src/syscall/mod.rs
View file @
4c381070
...
...
@@ -131,6 +131,7 @@ pub fn syscall(a: usize, b: usize, c: usize, d: usize, e: usize, f: usize, bp: u
SYS_PHYSFREE
=>
physfree
(
b
,
c
),
SYS_PHYSMAP
=>
physmap
(
b
,
c
,
d
),
SYS_PHYSUNMAP
=>
physunmap
(
b
),
SYS_UMASK
=>
umask
(
b
),
SYS_VIRTTOPHYS
=>
virttophys
(
b
),
_
=>
Err
(
Error
::
new
(
ENOSYS
))
}
...
...
src/syscall/process.rs
View file @
4c381070
...
...
@@ -73,6 +73,7 @@ pub fn clone(flags: usize, stack_base: usize) -> Result<ContextId> {
let
euid
;
let
egid
;
let
ens
;
let
umask
;
let
mut
cpu_id
=
None
;
let
arch
;
let
vfork
;
...
...
@@ -104,6 +105,7 @@ pub fn clone(flags: usize, stack_base: usize) -> Result<ContextId> {
euid
=
context
.euid
;
egid
=
context
.egid
;
ens
=
context
.ens
;
umask
=
context
.umask
;
if
flags
&
CLONE_VM
==
CLONE_VM
{
cpu_id
=
context
.cpu_id
;
...
...
@@ -323,6 +325,7 @@ pub fn clone(flags: usize, stack_base: usize) -> Result<ContextId> {
context
.euid
=
euid
;
context
.egid
=
egid
;
context
.ens
=
ens
;
context
.umask
=
umask
;
context
.cpu_id
=
cpu_id
;
...
...
@@ -1187,6 +1190,19 @@ pub fn sigreturn() -> Result<usize> {
unreachable!
();
}
pub
fn
umask
(
mask
:
usize
)
->
Result
<
usize
>
{
let
previous
;
{
let
contexts
=
context
::
contexts
();
let
context_lock
=
contexts
.current
()
.ok_or
(
Error
::
new
(
ESRCH
))
?
;
let
mut
context
=
context_lock
.write
();
previous
=
context
.umask
;
context
.umask
=
mask
;
}
Ok
(
previous
)
}
fn
reap
(
pid
:
ContextId
)
->
Result
<
ContextId
>
{
// Spin until not running
let
mut
running
=
true
;
...
...
syscall
@
cbb39163
Compare
de0f0624
...
cbb39163
Subproject commit
de0f06244695a5cbdd3a8157dc19823324af951e
Subproject commit
cbb39163d4f08cec10adb9154ad53c8be323b7a6
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment