Develop and Download Open Source Software

Browse Subversion Repository

Annotation of /trunk/caitsith-patch/patches/ccs-patch-4.19.diff

Parent Directory Parent Directory | Revision Log Revision Log


Revision 365 - (hide annotations) (download) (as text)
Thu May 12 05:23:34 2022 UTC (23 months ago) by kumaneko
File MIME type: text/x-diff
File size: 19838 byte(s)


1 kumaneko 365 This is TOMOYO Linux patch for kernel 4.19.241.
2 kumaneko 267
3 kumaneko 365 Source code for this patch is https://www.kernel.org/pub/linux/kernel/v4.x/linux-4.19.241.tar.xz
4 kumaneko 267 ---
5     fs/exec.c | 2 -
6     fs/open.c | 2 +
7     fs/proc/version.c | 7 ++++
8     include/linux/sched.h | 5 +++
9     include/linux/security.h | 68 ++++++++++++++++++++++++++++------------------
10     include/net/ip.h | 4 ++
11     init/init_task.c | 4 ++
12     kernel/kexec.c | 4 ++
13     kernel/module.c | 5 +++
14     kernel/ptrace.c | 10 ++++++
15     kernel/reboot.c | 3 ++
16     kernel/sched/core.c | 2 +
17     kernel/signal.c | 10 ++++++
18     kernel/sys.c | 8 +++++
19     kernel/time/timekeeping.c | 8 +++++
20     net/ipv4/raw.c | 4 ++
21     net/ipv4/udp.c | 2 +
22     net/ipv6/raw.c | 4 ++
23     net/ipv6/udp.c | 2 +
24     net/socket.c | 4 ++
25     net/unix/af_unix.c | 5 +++
26     security/Kconfig | 2 +
27     security/Makefile | 3 ++
28     security/security.c | 9 +++++-
29     24 files changed, 148 insertions(+), 29 deletions(-)
30    
31 kumaneko 365 --- linux-4.19.241.orig/fs/exec.c
32     +++ linux-4.19.241/fs/exec.c
33 kumaneko 327 @@ -1707,7 +1707,7 @@ static int exec_binprm(struct linux_binp
34 kumaneko 267 old_vpid = task_pid_nr_ns(current, task_active_pid_ns(current->parent));
35     rcu_read_unlock();
36    
37     - ret = search_binary_handler(bprm);
38     + ret = ccs_search_binary_handler(bprm);
39     if (ret >= 0) {
40     audit_bprm(bprm);
41     trace_sched_process_exec(current, old_pid, bprm);
42 kumaneko 365 --- linux-4.19.241.orig/fs/open.c
43     +++ linux-4.19.241/fs/open.c
44 kumaneko 302 @@ -1196,6 +1196,8 @@ SYSCALL_DEFINE1(close, unsigned int, fd)
45 kumaneko 267 */
46     SYSCALL_DEFINE0(vhangup)
47     {
48     + if (!ccs_capable(CCS_SYS_VHANGUP))
49     + return -EPERM;
50     if (capable(CAP_SYS_TTY_CONFIG)) {
51     tty_vhangup_self();
52     return 0;
53 kumaneko 365 --- linux-4.19.241.orig/fs/proc/version.c
54     +++ linux-4.19.241/fs/proc/version.c
55 kumaneko 267 @@ -21,3 +21,10 @@ static int __init proc_version_init(void
56     return 0;
57     }
58     fs_initcall(proc_version_init);
59     +
60     +static int __init ccs_show_version(void)
61     +{
62 kumaneko 365 + printk(KERN_INFO "Hook version: 4.19.241 2022/05/02\n");
63 kumaneko 267 + return 0;
64     +}
65     +fs_initcall(ccs_show_version);
66 kumaneko 365 --- linux-4.19.241.orig/include/linux/sched.h
67     +++ linux-4.19.241/include/linux/sched.h
68 kumaneko 267 @@ -34,6 +34,7 @@ struct audit_context;
69     struct backing_dev_info;
70     struct bio_list;
71     struct blk_plug;
72     +struct ccs_domain_info;
73     struct cfs_rq;
74     struct fs_struct;
75     struct futex_pi_state;
76 kumaneko 335 @@ -1202,6 +1203,10 @@ struct task_struct {
77 kumaneko 267 /* Used by LSM modules for access restriction: */
78     void *security;
79     #endif
80     +#if defined(CONFIG_CCSECURITY) && !defined(CONFIG_CCSECURITY_USE_EXTERNAL_TASK_SECURITY)
81     + struct ccs_domain_info *ccs_domain_info;
82     + u32 ccs_flags;
83     +#endif
84    
85     /*
86     * New fields for task_struct should be added above here, so that
87 kumaneko 365 --- linux-4.19.241.orig/include/linux/security.h
88     +++ linux-4.19.241/include/linux/security.h
89 kumaneko 267 @@ -53,6 +53,7 @@ struct msg_msg;
90     struct xattr;
91     struct xfrm_sec_ctx;
92     struct mm_struct;
93     +#include <linux/ccsecurity.h>
94    
95 kumaneko 296 /* Default (no) options for the capable function */
96     #define CAP_OPT_NONE 0x0
97 kumaneko 267 @@ -521,7 +522,10 @@ static inline int security_syslog(int ty
98     static inline int security_settime64(const struct timespec64 *ts,
99     const struct timezone *tz)
100     {
101     - return cap_settime(ts, tz);
102     + int error = cap_settime(ts, tz);
103     + if (!error)
104     + error = ccs_settime(ts, tz);
105     + return error;
106     }
107    
108     static inline int security_vm_enough_memory_mm(struct mm_struct *mm, long pages)
109     @@ -585,18 +589,18 @@ static inline int security_sb_mount(cons
110     const char *type, unsigned long flags,
111     void *data)
112     {
113     - return 0;
114     + return ccs_sb_mount(dev_name, path, type, flags, data);
115     }
116    
117     static inline int security_sb_umount(struct vfsmount *mnt, int flags)
118     {
119     - return 0;
120     + return ccs_sb_umount(mnt, flags);
121     }
122    
123     static inline int security_sb_pivotroot(const struct path *old_path,
124     const struct path *new_path)
125     {
126     - return 0;
127     + return ccs_sb_pivotroot(old_path, new_path);
128     }
129    
130     static inline int security_sb_set_mnt_opts(struct super_block *sb,
131     @@ -745,7 +749,7 @@ static inline int security_inode_setattr
132    
133     static inline int security_inode_getattr(const struct path *path)
134     {
135     - return 0;
136     + return ccs_inode_getattr(path);
137     }
138    
139     static inline int security_inode_setxattr(struct dentry *dentry,
140     @@ -831,7 +835,7 @@ static inline void security_file_free(st
141     static inline int security_file_ioctl(struct file *file, unsigned int cmd,
142     unsigned long arg)
143     {
144     - return 0;
145     + return ccs_file_ioctl(file, cmd, arg);
146     }
147    
148     static inline int security_mmap_file(struct file *file, unsigned long prot,
149     @@ -860,7 +864,7 @@ static inline int security_file_lock(str
150     static inline int security_file_fcntl(struct file *file, unsigned int cmd,
151     unsigned long arg)
152     {
153     - return 0;
154     + return ccs_file_fcntl(file, cmd, arg);
155     }
156    
157     static inline void security_file_set_fowner(struct file *file)
158     @@ -882,17 +886,19 @@ static inline int security_file_receive(
159    
160     static inline int security_file_open(struct file *file)
161     {
162     - return 0;
163     + return ccs_file_open(file);
164     }
165    
166     static inline int security_task_alloc(struct task_struct *task,
167     unsigned long clone_flags)
168     {
169     - return 0;
170     + return ccs_alloc_task_security(task);
171     }
172    
173     static inline void security_task_free(struct task_struct *task)
174     -{ }
175     +{
176     + ccs_free_task_security(task);
177     +}
178    
179     static inline int security_cred_alloc_blank(struct cred *cred, gfp_t gfp)
180     {
181     @@ -1264,7 +1270,7 @@ static inline int security_unix_may_send
182     static inline int security_socket_create(int family, int type,
183     int protocol, int kern)
184     {
185     - return 0;
186     + return ccs_socket_create(family, type, protocol, kern);
187     }
188    
189     static inline int security_socket_post_create(struct socket *sock,
190     @@ -1285,19 +1291,19 @@ static inline int security_socket_bind(s
191     struct sockaddr *address,
192     int addrlen)
193     {
194     - return 0;
195     + return ccs_socket_bind(sock, address, addrlen);
196     }
197    
198     static inline int security_socket_connect(struct socket *sock,
199     struct sockaddr *address,
200     int addrlen)
201     {
202     - return 0;
203     + return ccs_socket_connect(sock, address, addrlen);
204     }
205    
206     static inline int security_socket_listen(struct socket *sock, int backlog)
207     {
208     - return 0;
209     + return ccs_socket_listen(sock, backlog);
210     }
211    
212     static inline int security_socket_accept(struct socket *sock,
213     @@ -1309,7 +1315,7 @@ static inline int security_socket_accept
214     static inline int security_socket_sendmsg(struct socket *sock,
215     struct msghdr *msg, int size)
216     {
217     - return 0;
218     + return ccs_socket_sendmsg(sock, msg, size);
219     }
220    
221     static inline int security_socket_recvmsg(struct socket *sock,
222     @@ -1596,42 +1602,42 @@ int security_path_chroot(const struct pa
223     #else /* CONFIG_SECURITY_PATH */
224     static inline int security_path_unlink(const struct path *dir, struct dentry *dentry)
225     {
226     - return 0;
227     + return ccs_path_unlink(dir, dentry);
228     }
229    
230     static inline int security_path_mkdir(const struct path *dir, struct dentry *dentry,
231     umode_t mode)
232     {
233     - return 0;
234     + return ccs_path_mkdir(dir, dentry, mode);
235     }
236    
237     static inline int security_path_rmdir(const struct path *dir, struct dentry *dentry)
238     {
239     - return 0;
240     + return ccs_path_rmdir(dir, dentry);
241     }
242    
243     static inline int security_path_mknod(const struct path *dir, struct dentry *dentry,
244     umode_t mode, unsigned int dev)
245     {
246     - return 0;
247     + return ccs_path_mknod(dir, dentry, mode, dev);
248     }
249    
250     static inline int security_path_truncate(const struct path *path)
251     {
252     - return 0;
253     + return ccs_path_truncate(path);
254     }
255    
256     static inline int security_path_symlink(const struct path *dir, struct dentry *dentry,
257     const char *old_name)
258     {
259     - return 0;
260     + return ccs_path_symlink(dir, dentry, old_name);
261     }
262    
263     static inline int security_path_link(struct dentry *old_dentry,
264     const struct path *new_dir,
265     struct dentry *new_dentry)
266     {
267     - return 0;
268     + return ccs_path_link(old_dentry, new_dir, new_dentry);
269     }
270    
271     static inline int security_path_rename(const struct path *old_dir,
272     @@ -1640,22 +1646,32 @@ static inline int security_path_rename(c
273     struct dentry *new_dentry,
274     unsigned int flags)
275     {
276     - return 0;
277     + /*
278     + * Not using RENAME_EXCHANGE here in order to avoid KABI breakage
279     + * by doing "#include <uapi/linux/fs.h>" .
280     + */
281     + if (flags & (1 << 1)) {
282     + int err = ccs_path_rename(new_dir, new_dentry, old_dir,
283     + old_dentry);
284     + if (err)
285     + return err;
286     + }
287     + return ccs_path_rename(old_dir, old_dentry, new_dir, new_dentry);
288     }
289    
290     static inline int security_path_chmod(const struct path *path, umode_t mode)
291     {
292     - return 0;
293     + return ccs_path_chmod(path, mode);
294     }
295    
296     static inline int security_path_chown(const struct path *path, kuid_t uid, kgid_t gid)
297     {
298     - return 0;
299     + return ccs_path_chown(path, uid, gid);
300     }
301    
302     static inline int security_path_chroot(const struct path *path)
303     {
304     - return 0;
305     + return ccs_path_chroot(path);
306     }
307     #endif /* CONFIG_SECURITY_PATH */
308    
309 kumaneko 365 --- linux-4.19.241.orig/include/net/ip.h
310     +++ linux-4.19.241/include/net/ip.h
311 kumaneko 352 @@ -302,6 +302,8 @@ void inet_get_local_port_range(struct ne
312 kumaneko 267 #ifdef CONFIG_SYSCTL
313     static inline int inet_is_local_reserved_port(struct net *net, int port)
314     {
315     + if (ccs_lport_reserved(port))
316     + return 1;
317     if (!net->ipv4.sysctl_local_reserved_ports)
318     return 0;
319     return test_bit(port, net->ipv4.sysctl_local_reserved_ports);
320 kumaneko 352 @@ -320,6 +322,8 @@ static inline int inet_prot_sock(struct
321 kumaneko 267 #else
322     static inline int inet_is_local_reserved_port(struct net *net, int port)
323     {
324     + if (ccs_lport_reserved(port))
325     + return 1;
326     return 0;
327     }
328    
329 kumaneko 365 --- linux-4.19.241.orig/init/init_task.c
330     +++ linux-4.19.241/init/init_task.c
331 kumaneko 335 @@ -180,6 +180,10 @@ struct task_struct init_task
332 kumaneko 267 #ifdef CONFIG_SECURITY
333     .security = NULL,
334     #endif
335     +#if defined(CONFIG_CCSECURITY) && !defined(CONFIG_CCSECURITY_USE_EXTERNAL_TASK_SECURITY)
336     + .ccs_domain_info = NULL,
337     + .ccs_flags = 0,
338     +#endif
339     };
340     EXPORT_SYMBOL(init_task);
341    
342 kumaneko 365 --- linux-4.19.241.orig/kernel/kexec.c
343     +++ linux-4.19.241/kernel/kexec.c
344 kumaneko 267 @@ -18,7 +18,7 @@
345     #include <linux/syscalls.h>
346     #include <linux/vmalloc.h>
347     #include <linux/slab.h>
348     -
349     +#include <linux/ccsecurity.h>
350     #include "kexec_internal.h"
351    
352     static int copy_user_segment_list(struct kimage *image,
353     @@ -201,6 +201,8 @@ static inline int kexec_load_check(unsig
354     /* We only trust the superuser with rebooting the system. */
355     if (!capable(CAP_SYS_BOOT) || kexec_load_disabled)
356     return -EPERM;
357     + if (!ccs_capable(CCS_SYS_KEXEC_LOAD))
358     + return -EPERM;
359    
360     /* Permit LSMs and IMA to fail the kexec */
361     result = security_kernel_load_data(LOADING_KEXEC_IMAGE);
362 kumaneko 365 --- linux-4.19.241.orig/kernel/module.c
363     +++ linux-4.19.241/kernel/module.c
364 kumaneko 267 @@ -66,6 +66,7 @@
365     #include <linux/audit.h>
366     #include <uapi/linux/module.h>
367     #include "module-internal.h"
368     +#include <linux/ccsecurity.h>
369    
370     #define CREATE_TRACE_POINTS
371     #include <trace/events/module.h>
372 kumaneko 351 @@ -972,6 +973,8 @@ SYSCALL_DEFINE2(delete_module, const cha
373 kumaneko 267
374     if (!capable(CAP_SYS_MODULE) || modules_disabled)
375     return -EPERM;
376     + if (!ccs_capable(CCS_USE_KERNEL_MODULE))
377     + return -EPERM;
378    
379     if (strncpy_from_user(name, name_user, MODULE_NAME_LEN-1) < 0)
380     return -EFAULT;
381 kumaneko 364 @@ -3616,6 +3619,8 @@ static int may_init_module(void)
382 kumaneko 267 {
383     if (!capable(CAP_SYS_MODULE) || modules_disabled)
384     return -EPERM;
385     + if (!ccs_capable(CCS_USE_KERNEL_MODULE))
386     + return -EPERM;
387    
388     return 0;
389     }
390 kumaneko 365 --- linux-4.19.241.orig/kernel/ptrace.c
391     +++ linux-4.19.241/kernel/ptrace.c
392     @@ -1169,6 +1169,11 @@ SYSCALL_DEFINE4(ptrace, long, request, l
393 kumaneko 267 {
394     struct task_struct *child;
395     long ret;
396     + {
397     + const int rc = ccs_ptrace_permission(request, pid);
398     + if (rc)
399     + return rc;
400     + }
401    
402     if (request == PTRACE_TRACEME) {
403     ret = ptrace_traceme();
404 kumaneko 365 @@ -1317,6 +1322,11 @@ COMPAT_SYSCALL_DEFINE4(ptrace, compat_lo
405 kumaneko 267 {
406     struct task_struct *child;
407     long ret;
408     + {
409     + const int rc = ccs_ptrace_permission(request, pid);
410     + if (rc)
411     + return rc;
412     + }
413    
414     if (request == PTRACE_TRACEME) {
415     ret = ptrace_traceme();
416 kumaneko 365 --- linux-4.19.241.orig/kernel/reboot.c
417     +++ linux-4.19.241/kernel/reboot.c
418 kumaneko 267 @@ -16,6 +16,7 @@
419     #include <linux/syscalls.h>
420     #include <linux/syscore_ops.h>
421     #include <linux/uaccess.h>
422     +#include <linux/ccsecurity.h>
423    
424     /*
425     * this indicates whether you can reboot with ctrl-alt-del: the default is yes
426     @@ -322,6 +323,8 @@ SYSCALL_DEFINE4(reboot, int, magic1, int
427     magic2 != LINUX_REBOOT_MAGIC2B &&
428     magic2 != LINUX_REBOOT_MAGIC2C))
429     return -EINVAL;
430     + if (!ccs_capable(CCS_SYS_REBOOT))
431     + return -EPERM;
432    
433     /*
434     * If pid namespaces are enabled and the current task is in a child
435 kumaneko 365 --- linux-4.19.241.orig/kernel/sched/core.c
436     +++ linux-4.19.241/kernel/sched/core.c
437 kumaneko 362 @@ -3992,6 +3992,8 @@ int can_nice(const struct task_struct *p
438 kumaneko 267 SYSCALL_DEFINE1(nice, int, increment)
439     {
440     long nice, retval;
441     + if (!ccs_capable(CCS_SYS_NICE))
442     + return -EPERM;
443    
444     /*
445     * Setpriority might change our priority at the same moment.
446 kumaneko 365 --- linux-4.19.241.orig/kernel/signal.c
447     +++ linux-4.19.241/kernel/signal.c
448 kumaneko 362 @@ -3276,6 +3276,8 @@ COMPAT_SYSCALL_DEFINE4(rt_sigtimedwait,
449 kumaneko 267 SYSCALL_DEFINE2(kill, pid_t, pid, int, sig)
450     {
451     struct siginfo info;
452     + if (ccs_kill_permission(pid, sig))
453     + return -EPERM;
454    
455     clear_siginfo(&info);
456     info.si_signo = sig;
457 kumaneko 362 @@ -3346,6 +3348,8 @@ SYSCALL_DEFINE3(tgkill, pid_t, tgid, pid
458 kumaneko 267 /* This is only valid for single tasks */
459     if (pid <= 0 || tgid <= 0)
460     return -EINVAL;
461     + if (ccs_tgkill_permission(tgid, pid, sig))
462     + return -EPERM;
463    
464     return do_tkill(tgid, pid, sig);
465     }
466 kumaneko 362 @@ -3362,6 +3366,8 @@ SYSCALL_DEFINE2(tkill, pid_t, pid, int,
467 kumaneko 267 /* This is only valid for single tasks */
468     if (pid <= 0)
469     return -EINVAL;
470     + if (ccs_tkill_permission(pid, sig))
471     + return -EPERM;
472    
473     return do_tkill(0, pid, sig);
474     }
475 kumaneko 362 @@ -3376,6 +3382,8 @@ static int do_rt_sigqueueinfo(pid_t pid,
476 kumaneko 267 return -EPERM;
477    
478     info->si_signo = sig;
479     + if (ccs_sigqueue_permission(pid, sig))
480     + return -EPERM;
481    
482     /* POSIX.1b doesn't mention process groups. */
483     return kill_proc_info(sig, info, pid);
484 kumaneko 362 @@ -3424,6 +3432,8 @@ static int do_rt_tgsigqueueinfo(pid_t tg
485 kumaneko 267 return -EPERM;
486    
487     info->si_signo = sig;
488     + if (ccs_tgsigqueue_permission(tgid, pid, sig))
489     + return -EPERM;
490    
491     return do_send_specific(tgid, pid, sig, info);
492     }
493 kumaneko 365 --- linux-4.19.241.orig/kernel/sys.c
494     +++ linux-4.19.241/kernel/sys.c
495 kumaneko 268 @@ -201,6 +201,10 @@ SYSCALL_DEFINE3(setpriority, int, which,
496 kumaneko 267
497     if (which > PRIO_USER || which < PRIO_PROCESS)
498     goto out;
499     + if (!ccs_capable(CCS_SYS_NICE)) {
500     + error = -EPERM;
501     + goto out;
502     + }
503    
504     /* normalize: avoid signed division (rounding problems) */
505     error = -ESRCH;
506 kumaneko 324 @@ -1310,6 +1314,8 @@ SYSCALL_DEFINE2(sethostname, char __user
507 kumaneko 267
508     if (len < 0 || len > __NEW_UTS_LEN)
509     return -EINVAL;
510     + if (!ccs_capable(CCS_SYS_SETHOSTNAME))
511     + return -EPERM;
512     errno = -EFAULT;
513     if (!copy_from_user(tmp, name, len)) {
514     struct new_utsname *u;
515 kumaneko 324 @@ -1362,6 +1368,8 @@ SYSCALL_DEFINE2(setdomainname, char __us
516 kumaneko 267 return -EPERM;
517     if (len < 0 || len > __NEW_UTS_LEN)
518     return -EINVAL;
519     + if (!ccs_capable(CCS_SYS_SETHOSTNAME))
520     + return -EPERM;
521    
522     errno = -EFAULT;
523     if (!copy_from_user(tmp, name, len)) {
524 kumaneko 365 --- linux-4.19.241.orig/kernel/time/timekeeping.c
525     +++ linux-4.19.241/kernel/time/timekeeping.c
526 kumaneko 267 @@ -26,6 +26,7 @@
527     #include <linux/stop_machine.h>
528     #include <linux/pvclock_gtod.h>
529     #include <linux/compiler.h>
530     +#include <linux/ccsecurity.h>
531    
532     #include "tick-internal.h"
533     #include "ntp_internal.h"
534 kumaneko 363 @@ -2255,10 +2256,15 @@ static int timekeeping_validate_timex(co
535 kumaneko 267 if (!(txc->modes & ADJ_OFFSET_READONLY) &&
536     !capable(CAP_SYS_TIME))
537     return -EPERM;
538     + if (!(txc->modes & ADJ_OFFSET_READONLY) &&
539     + !ccs_capable(CCS_SYS_SETTIME))
540     + return -EPERM;
541     } else {
542     /* In order to modify anything, you gotta be super-user! */
543     if (txc->modes && !capable(CAP_SYS_TIME))
544     return -EPERM;
545     + if (txc->modes && !ccs_capable(CCS_SYS_SETTIME))
546     + return -EPERM;
547     /*
548     * if the quartz is off by more than 10% then
549     * something is VERY wrong!
550 kumaneko 363 @@ -2273,6 +2279,8 @@ static int timekeeping_validate_timex(co
551 kumaneko 267 /* In order to inject time, you gotta be super-user! */
552     if (!capable(CAP_SYS_TIME))
553     return -EPERM;
554     + if (!ccs_capable(CCS_SYS_SETTIME))
555     + return -EPERM;
556    
557     /*
558     * Validate if a timespec/timeval used to inject a time
559 kumaneko 365 --- linux-4.19.241.orig/net/ipv4/raw.c
560     +++ linux-4.19.241/net/ipv4/raw.c
561 kumaneko 363 @@ -775,6 +775,10 @@ static int raw_recvmsg(struct sock *sk,
562 kumaneko 267 skb = skb_recv_datagram(sk, flags, noblock, &err);
563     if (!skb)
564     goto out;
565     + if (ccs_socket_post_recvmsg_permission(sk, skb, flags)) {
566     + err = -EAGAIN; /* Hope less harmful than -EPERM. */
567     + goto out;
568     + }
569    
570     copied = skb->len;
571     if (len < copied) {
572 kumaneko 365 --- linux-4.19.241.orig/net/ipv4/udp.c
573     +++ linux-4.19.241/net/ipv4/udp.c
574 kumaneko 314 @@ -1686,6 +1686,8 @@ try_again:
575 kumaneko 267 skb = __skb_recv_udp(sk, flags, noblock, &peeked, &off, &err);
576     if (!skb)
577     return err;
578     + if (ccs_socket_post_recvmsg_permission(sk, skb, flags))
579     + return -EAGAIN; /* Hope less harmful than -EPERM. */
580    
581     ulen = udp_skb_len(skb);
582     copied = len;
583 kumaneko 365 --- linux-4.19.241.orig/net/ipv6/raw.c
584     +++ linux-4.19.241/net/ipv6/raw.c
585 kumaneko 279 @@ -485,6 +485,10 @@ static int rawv6_recvmsg(struct sock *sk
586 kumaneko 267 skb = skb_recv_datagram(sk, flags, noblock, &err);
587     if (!skb)
588     goto out;
589     + if (ccs_socket_post_recvmsg_permission(sk, skb, flags)) {
590     + err = -EAGAIN; /* Hope less harmful than -EPERM. */
591     + goto out;
592     + }
593    
594     copied = skb->len;
595     if (copied > len) {
596 kumaneko 365 --- linux-4.19.241.orig/net/ipv6/udp.c
597     +++ linux-4.19.241/net/ipv6/udp.c
598 kumaneko 314 @@ -347,6 +347,8 @@ try_again:
599 kumaneko 267 skb = __skb_recv_udp(sk, flags, noblock, &peeked, &off, &err);
600     if (!skb)
601     return err;
602     + if (ccs_socket_post_recvmsg_permission(sk, skb, flags))
603     + return -EAGAIN; /* Hope less harmful than -EPERM. */
604    
605     ulen = udp6_skb_len(skb);
606     copied = len;
607 kumaneko 365 --- linux-4.19.241.orig/net/socket.c
608     +++ linux-4.19.241/net/socket.c
609 kumaneko 356 @@ -1702,6 +1702,10 @@ int __sys_accept4(int fd, struct sockadd
610 kumaneko 267 if (err < 0)
611     goto out_fd;
612    
613     + if (ccs_socket_post_accept_permission(sock, newsock)) {
614     + err = -EAGAIN; /* Hope less harmful than -EPERM. */
615     + goto out_fd;
616     + }
617     if (upeer_sockaddr) {
618     len = newsock->ops->getname(newsock,
619     (struct sockaddr *)&address, 2);
620 kumaneko 365 --- linux-4.19.241.orig/net/unix/af_unix.c
621     +++ linux-4.19.241/net/unix/af_unix.c
622 kumaneko 361 @@ -2169,6 +2169,10 @@ static int unix_dgram_recvmsg(struct soc
623 kumaneko 267 EPOLLOUT | EPOLLWRNORM |
624     EPOLLWRBAND);
625    
626     + if (ccs_socket_post_recvmsg_permission(sk, skb, flags)) {
627     + err = -EAGAIN; /* Hope less harmful than -EPERM. */
628     + goto out_unlock;
629     + }
630     if (msg->msg_name)
631     unix_copy_addr(msg, skb->sk);
632    
633 kumaneko 361 @@ -2219,6 +2223,7 @@ static int unix_dgram_recvmsg(struct soc
634 kumaneko 267
635     out_free:
636     skb_free_datagram(sk, skb);
637     +out_unlock:
638     mutex_unlock(&u->iolock);
639     out:
640     return err;
641 kumaneko 365 --- linux-4.19.241.orig/security/Kconfig
642     +++ linux-4.19.241/security/Kconfig
643 kumaneko 362 @@ -279,5 +279,7 @@ config DEFAULT_SECURITY
644 kumaneko 267 default "apparmor" if DEFAULT_SECURITY_APPARMOR
645     default "" if DEFAULT_SECURITY_DAC
646    
647     +source security/ccsecurity/Kconfig
648     +
649     endmenu
650    
651 kumaneko 365 --- linux-4.19.241.orig/security/Makefile
652     +++ linux-4.19.241/security/Makefile
653 kumaneko 267 @@ -30,3 +30,6 @@ obj-$(CONFIG_CGROUP_DEVICE) += device_c
654     # Object integrity file lists
655     subdir-$(CONFIG_INTEGRITY) += integrity
656     obj-$(CONFIG_INTEGRITY) += integrity/
657     +
658     +subdir-$(CONFIG_CCSECURITY) += ccsecurity
659     +obj-$(CONFIG_CCSECURITY) += ccsecurity/
660 kumaneko 365 --- linux-4.19.241.orig/security/security.c
661     +++ linux-4.19.241/security/security.c
662 kumaneko 296 @@ -984,12 +984,19 @@ int security_file_open(struct file *file
663 kumaneko 267
664     int security_task_alloc(struct task_struct *task, unsigned long clone_flags)
665     {
666     - return call_int_hook(task_alloc, 0, task, clone_flags);
667     + int ret = ccs_alloc_task_security(task);
668     + if (ret)
669     + return ret;
670     + ret = call_int_hook(task_alloc, 0, task, clone_flags);
671     + if (ret)
672     + ccs_free_task_security(task);
673     + return ret;
674     }
675    
676     void security_task_free(struct task_struct *task)
677     {
678     call_void_hook(task_free, task);
679     + ccs_free_task_security(task);
680     }
681    
682     int security_cred_alloc_blank(struct cred *cred, gfp_t gfp)

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26