オープンソース・ソフトウェアの開発とダウンロード

Subversion リポジトリの参照

Diff of /trunk/1.8.x/ccs-patch/README.ccs

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

trunk/1.7.x/ccs-patch/README.ccs revision 3536 by kumaneko, Fri Mar 26 01:17:00 2010 UTC trunk/1.8.x/ccs-patch/README.ccs revision 4724 by kumaneko, Tue Mar 15 05:23:03 2011 UTC
# Line 1723  Fix 2008/11/07 Line 1723  Fix 2008/11/07
1723        to see process information. The content of /proc/ccs/.execute_handler is        to see process information. The content of /proc/ccs/.execute_handler is
1724        identical to /proc/ccs/.process_status .        identical to /proc/ccs/.process_status .
1725    
1726  Version 1.6.5   2008/11/11   Third anniversary release.  Version 1.6.5 2008/11/11   Third anniversary release.
1727    
1728  Fix 2008/12/01  Fix 2008/12/01
1729    
# Line 2243  Fix 2009/11/09 Line 2243  Fix 2009/11/09
2243        /proc/ccs/profile (which results in not protecting the system at all),        /proc/ccs/profile (which results in not protecting the system at all),
2244        I added a check for PROFILE_VERSION= .        I added a check for PROFILE_VERSION= .
2245    
2246  Version 1.7.1   2009/11/11   Fourth anniversary release.  Version 1.7.1 2009/11/11   Fourth anniversary release.
2247    
2248  Fix 2009/11/13  Fix 2009/11/13
2249    
# Line 2366  Fix 2010/03/08 Line 2366  Fix 2010/03/08
2366        inevitable, this change will make it easier to enable TOMOYO Linux        inevitable, this change will make it easier to enable TOMOYO Linux
2367        when there is a filesize limitation on vmlinux (e.g. embedded systems).        when there is a filesize limitation on vmlinux (e.g. embedded systems).
2368    
 Fix 2010/03/21  
   
     @ Improve garbage collector.  
   
       Until now, garbage collector did not start garbage collection until  
       /proc/ccs/ users call close(). But since it is not good behavior to  
       leave the kernel with SRCU read lock held, I changed /proc/ccs/ users  
       not to leave the kernel with SRCU read lock held. As a result, garbage  
       collector can start garbage collection before /proc/ccs/ users call  
       close().  
   
2369  Fix 2010/03/25  Fix 2010/03/25
2370    
2371      @ Fix ccs_get_ipv6_address() bug.      @ Fix ccs_get_ipv6_address() bug.
# Line 2392  Fix 2010/03/26 Line 2381  Fix 2010/03/26
2381    
2382        Since 1.7.0 , ccs_lport_reserved() was by error checking wrong port        Since 1.7.0 , ccs_lport_reserved() was by error checking wrong port
2383        number. As a result, "deny_autobind" keyword was not working as expected.        number. As a result, "deny_autobind" keyword was not working as expected.
2384    
2385    Version 1.7.2 2010/04/01   Feature enhancement release.
2386    
2387    Fix 2010/04/10
2388    
2389        @ Fix invalid "struct nameidata" to "struct path" conversion macro.
2390    
2391          Regarding kernels 2.6.24 and earlier, I was converting "struct nameidata"
2392          to "struct path" in caller side so that I can unify the callee function's
2393          parameter type. But it turned out that the macro I used did not follow C
2394          standards and did not work with gcc 4.x . As a result, "allow_pivot_root"
2395          keyword was not working as expected.
2396    
2397    Fix 2010/05/05
2398    
2399        @ Fix incorrect audit on/off control.
2400    
2401          The grant_log= and reject_log= parameters of CONFIG::misc::env were not
2402          used because I forgot to update request type. As a result, those of
2403          CONFIG::file::execute were used for CONFIG::misc::env .
2404    
2405          Those of CONFIG::file::rewrite were not used because I forgot to update
2406          request type. As a result, those of CONFIG::file::truncate were used for
2407          CONFIG::file::rewrite .
2408    
2409    Fix 2010/05/10
2410    
2411        @ Fix incorrect out of memory warning.
2412    
2413          Out of memory warnings were not printed in some cases by error.
2414    
2415    Fix 2010/05/27
2416    
2417        @ Add missing rcu_dereference() for ccs_find_execute_handler().
2418    
2419          Since 1.7.0 , ccs_find_execute_handler() was by error using
2420          list_for_each_entry() rather than list_for_each_entry_rcu().
2421          This bug affects only Alpha architecture.
2422    
2423    Fix 2010/06/03
2424    
2425        @ Fix missing sanity check for "file_pattern".
2426    
2427          Since 1.7.0 , ccs_write_pattern_policy() was by error accepting
2428          invalid pathname.
2429    
2430    Fix 2010/06/09
2431    
2432        @ Add missing ccs_put_name() in ccs_parse_envp().
2433    
2434          Since 1.7.0 , ccs_parse_envp() was not calling ccs_put_name() if
2435          environment variable's value ('if exec.envp["name"]="value"' condition)
2436          was invalid.
2437    
2438        @ Add missing NULL check in ccs_condition().
2439    
2440          Since 1.7.0 , if 'if symlink.target=' part was given against non-file
2441          permissions (e.g. allow_env PATH if symlink.target="/"), it triggered
2442          NULL pointer dereference.
2443    
2444    Fix 2010/10/28
2445    
2446        @ Fix umount() pathname calculation.
2447    
2448          "mount --bind /path/to/file1 /path/to/file2" is legal.
2449          Therefore, "umount /path/to/file2" is also legal.
2450          Do not automatically append trailing '/' if pathname to be unmounted
2451          does not end with '/'.
2452    
2453        @ Add preserve KABI compatibility option. (2.6 kernels only)
2454    
2455          TOMOYO needs "struct ccs_domain_info *" and "u32" for each
2456          "struct task_struct". But embedding these variables into
2457          "struct task_struct" breaks KABI for prebuilt kernel modules (which
2458          means that you will need to rebuild prebuilt kernel modules).
2459    
2460          Since KABI is commonly used (compared to 5 years ago), asking users to
2461          rebuild kernel modules which are not included in kernel package is no
2462          longer preferable. Therefore, I added a new option that keeps
2463          "struct task_struct" unmodified in order to keep KABI.
2464    
2465          Note that you have to use ccs-patch-2.6.\*.diff which patches
2466          kernel/fork.c in order to use this option. Otherwise, TOMOYO will leak
2467          memory whenever "struct task_struct" is released.
2468    
2469        @ Change directives.
2470    
2471          I removed "allow_" prefix from directives. New directives for files are
2472          prefixed with "file ". For example, "allow_read" changed to "file read",
2473          "allow_ioctl" changed to "file ioctl". New directive for "allow_network
2474          TCP" is "network inet stream", "allow_network UDP" is "network inet
2475          dgram", "allow_network RAW" is "network inet raw". New directive for
2476          "allow_env" is "misc env". New directive for "allow_signal" is "ipc
2477          signal". New directive for "allow_capability" is "capability". These new
2478          directives correspond with keywords used by profile's CONFIG lines.
2479    
2480          I removed "deny_rewrite" and "allow_rewrite" directives and introduced
2481          "file append" directive. Thus, permission for open(O_WRONLY | O_APPEND)
2482          changed from "allow_write" + "allow_rewrite" to "file append".
2483    
2484          I removed "SYS_MOUNT", "SYS_UMOUNT", "SYS_CHROOT", "SYS_KILL",
2485          "SYS_LINK", "SYS_SYMLINK", "SYS_RENAME", "SYS_UNLINK", "SYS_CHMOD",
2486          "SYS_CHOWN", "SYS_IOCTL", "SYS_PIVOT_ROOT" keywords from capabilities
2487          because these permissions can be checked by other directives (e.g.
2488          "file mount", "ipc signal").
2489    
2490          I also removed "conceal_mount" keyword from capabilities because this
2491          check requires hooks in filesystem part while almost all hooks for
2492          filesystem part have moved to LSM by Linux 2.6.34.
2493    
2494          New directive for "execute_handler" is "task auto_execute_handler",
2495          "denied_execute_handler" is "task denied_execute_handler".
2496    
2497        @ Distinguish send() and recv() operations.
2498    
2499          Until now, it was impossible for UDP and IP sockets to allow either
2500          only sending or only receiving because permissions were aggregated with
2501          "connect" keyword. I broke "connect" keyword into "send" and "recv"
2502          keywords so that you can keep access control for send() operation enabled
2503          when you have to disable access control for recv() operation due to
2504          application breakage by discarding incoming datagram.
2505    
2506        @ Add Unix domain socket restriction support.
2507    
2508          Until now, it was possible to restrict only inet domain sockets (i.e.
2509          TCP/UDP/RAW). I added restriction for Unix domain sockets (i.e. stream/
2510          dgram/seqpacket). New directive "network unix" is added as well as
2511          "network inet" directive.
2512    
2513        @ Allow specifying multiple permissions in a line.
2514    
2515          Until now, only "allow_read/write" can be specified for combination of
2516          "allow_read" + "allow_write". Now, you can combine other permissions as
2517          long as type of parameters for these permissions is same. For example,
2518          "file read/write/append/execute/unlink/truncate /tmp/file" is correct
2519          but "file read/write/create /tmp/file" is wrong because "file create"
2520          requires create mode whereas "file read" and "file write" do not.
2521    
2522        @ Allow wildcard for execute permission and domainname.
2523    
2524          Until now, to execute programs with temporary names, "aggregator" is
2525          needed. To simplify code, I modified to accept wildcards for execute
2526          permission and domainname. Now, you can directly specify
2527          "file execute /tmp/logrotate.\?\?\?\?\?\?" and use
2528          "/tmp/logrotate.\?\?\?\?\?\?" within domainnames.
2529    
2530        @ Change pathname for non-rename()able filesystems.
2531    
2532          LSM version of TOMOYO wants to use /proc/self/ rather than /proc/$PID/ if
2533          $PID matches current thread's process ID in order to prevent current
2534          thread from accessing other process's information unless needed.
2535          But since procfs can be mounted on various locations (e.g. /proc/ /proc2/
2536          /p/ /tmp/foo/100/p/ ), LSM version of TOMOYO cannot tell that whether the
2537          numeric part in the string returned by __d_path() represents process ID
2538          or not.
2539    
2540          Therefore, to be able to convert from $PID to self no matter where procfs
2541          is mounted, I changed pathname representations for filesystems which do
2542          not support rename() operation (e.g. proc, sysfs, securityfs).
2543    
2544          Now, "/proc/self/mounts" changed to "proc:/self/mounts" and
2545          "/sys/kernel/security/" changed to "sys:/kernel/security/" and
2546          "/dev/pts/0" changed to "devpts:/0".
2547    
2548        @ Add a new keyword "any" for domain transition control.
2549    
2550          To be able to make it easier to apply auto_execute_handler on each
2551          domain, I added "any" keyword to domain transition control keywords. Now,
2552          "initialize_domain /usr/sbin/sshd" changed to
2553          "initialize_domain /usr/sbin/sshd from any" and
2554          "keep_domain <kernel> /usr/sbin/sshd /bin/bash" changed to
2555          "keep_domain any from <kernel> /usr/sbin/sshd /bin/bash".
2556    
2557          "keep_domain /path/to/auto_execute_handler from any" will allow you to
2558          apply auto_execute_handler for any domains without creating domains for
2559          auto_execute_handler.
2560    
2561        @ Change buffering mode for reading policy.
2562    
2563          To be able to read() very very long lines correctly, I changed the way
2564          TOMOYO buffers policy for reading.
2565    
2566        @ Introduce "acl_group" keyword.
2567    
2568          Until now, it was possible to specify only "allow_read" and "allow_env"
2569          keywords in the exception policy.
2570    
2571          Since some operations like "file read/write/append /dev/null" and
2572          "network UDP send/recv @DNS_SERVER 53" are very common and should be
2573          permitted to all domains, I introduced "acl_group" keyword for giving
2574          such permissions.
2575    
2576          For example, specify "acl_group 0 file read/write/append /dev/null" in
2577          the exception policy and specify "use_group 0" from the domains in the
2578          domain policy.
2579    
2580          "ignore_global_allow_read" and "ignore_global_allow_env" directives were
2581          removed from domain policy and "use_group" keyword was added.
2582    
2583        @ Remove "if" and "; set" keyword.
2584    
2585          I removed need for specifying these keyword.
2586          You can simply specify like below.
2587    
2588            file read /etc/shadow task.uid=0
2589    
2590        @ Remove "file_pattern" keyword.
2591    
2592          I removed "file_pattern" keyword because it is impossible to predefine
2593          all possible pathname patterns. Also, learning pathnames using incomplete
2594          patterns makes it difficult to later replace using "path_group" keyword.
2595    
2596        @ Replace verbose= parameter with statistic interface.
2597    
2598          Since it is noisy if a lot of policy violation messages are printed,
2599          I removed printk(). To be able to check whether policy violation occurred
2600          or not, I introduced /proc/ccs/stat interface which counts number of
2601          policy violations occurred. You can firstly check /proc/ccs/stat and then
2602          check /proc/ccs/reject_log .
2603    
2604        @ Remove global preference.
2605    
2606          I removed global preference in order to make code simpler.
2607    
2608        @ Allow controlling generation of access granted logs for per an entry
2609          basis.
2610    
2611          I added per-entry flag which controls generation of grant logs because
2612          Xen and KVM issues ioctl requests so frequently. For example,
2613    
2614            file ioctl /dev/null 0x5401 grant_log=no
2615    
2616          will suppress /proc/ccs/grant_log even if preference says grant_log=yes .
2617    
2618            file ioctl /dev/null 0x5401 grant_log=yes
2619    
2620          will generate /proc/ccs/grant_log even if preference says grant_log=no .
2621    
2622            file ioctl /dev/null 0x5401
2623    
2624          will generate /proc/ccs/grant_log only if preference says grant_log=yes .
2625    
2626          This flag is intended for frequently accessed resources like
2627    
2628            file read /var/www/html/\{\*\}/\*.html grant_log=no
2629    
2630          .
2631    
2632        @ Automatically create domain by execve() even if enforcing mode.
2633    
2634          Until now, new domains are not created if the domain was not defined and
2635          current domain is enforcing mode ("CONFIG::file::execute=enforcing").
2636    
2637          To be able to restrict shell session without using "keep_domain",
2638          I changed to create new domains automatically even if current domain is
2639          enforcing mode.
2640    
2641        @ Replace "task.state" with "auto_domain_transition".
2642    
2643          task.state is difficult to use. Thus, I replaced task.state with
2644          auto_domain_transition which performs domain transition instead of
2645          changing current process's state variables.
2646    
2647          If domain transition failed, current process will be killed by SIGKILL
2648          signal. This should not happen in normal circumstances, for you know the
2649          domain to transit to and thereby you will define the domain beforehand
2650          when you use "auto_domain_transition" keyword.
2651    
2652        @ Replace "allow_transit" with "task manual_domain_transition".
2653    
2654          I changed this directive to specify absolute domainname (e.g.
2655          "<kernel> /usr/sbin/httpd //app=cgi1\040id=10000") rather than virtual
2656          pathname (e.g. "//app=cgi1\040id=10000") because you know the domain to
2657          transit to and thereby you will define the domain beforehand when you use
2658          "task manual_domain_transition" directive.
2659    
2660          This change allows you to jump to arbitrary domain.
2661    
2662          Note that this change also reverts "Change /proc/ccs/info/self_domain ."
2663          made on 2006/10/24. Now, 'cat < /proc/ccs/info/self_domain' will act like
2664          'cat /proc/ccs/info/self_domain'. Programs depending on old assumption
2665          need to be updated.
2666    
2667        @ Add "task auto_domain_transition".
2668    
2669          This is similar to "task manual_domain_transition", but is automatically
2670          applied whenever conditions are met. For example,
2671    
2672            task auto_domain_transition <kernel> //./non-root task.uid!=0
2673    
2674          will automatically jump to "<kernel> //./non-root" domain if current
2675          process's UID is not 0 whereas
2676    
2677            task manual_domain_transition <kernel> //./non-root task.uid!=0
2678    
2679          will jump to "<kernel> //./non-root" domain if current process's UID is
2680          not 0 and current process wrote "<kernel> //./non-root" to
2681          /proc/ccs/self_domain interface.
2682    
2683          If domain transition failed, current process will be killed by SIGKILL
2684          signal.
2685    
2686        @ Optimize for object's size.
2687    
2688          I merged similar code in order to reduce object's filesize.
2689    
2690    Version 1.8.0 2010/11/11   Fifth anniversary release.
2691    
2692    Fix 2010/12/01
2693    
2694        @ Use same interface for audit logs.
2695    
2696          To be able to perform fine grained filtering by /usr/sbin/ccs-auditd ,
2697          I merged /proc/ccs/grant_log and /proc/ccs/reject_log as
2698          /proc/ccs/audit and added granted=yes or granted=no to audit logs.
2699    
2700    Fix 2010/12/17
2701    
2702        @ Split ccs_null_security into ccs_default_security and ccs_oom_security.
2703    
2704          ccs_null_security is used by preserve KABI compatibility option and is
2705          used for providing default values against threads which have not yet
2706          allocated memory for their security contexts.
2707    
2708          If current thread failed to allocate memory for current thread's security
2709          context, current thread uses ccs_null_security. Since current thread is
2710          allowed to modify current thread's security context, current thread might
2711          modify ccs_null_security which should not be modified for any reason.
2712    
2713          Therefore, I split ccs_null_security into ccs_default_security and
2714          ccs_oom_security and use ccs_oom_security when current thread failed to
2715          allocate memory for current thread's security context.
2716    
2717          Threads which do not share ccs_oom_security are not affected by threads
2718          which share ccs_oom_security. Threads which share ccs_oom_security will
2719          experience temporary inconsistency, but such threads are about to be
2720          killed by SIGKILL signal.
2721    
2722    Fix 2011/01/11
2723    
2724        @ Use filesystem name for unnamed devices when vfsmount is missing.
2725    
2726          "Change pathname for non-rename()able filesystems." changed to use
2727          "$fsname:" if the filesystem does not support rename() operation and
2728          "dev($major,$minor):" otherwise when vfsmount is missing. But it turned
2729          out that it is useless to use "dev($major,$minor):" for unnamed devices
2730          (filesystems with $major == 0). Thus, I changed to use "$fsname:" rather
2731          than "dev($major,$minor):" for filesystems with $major == 0 when vfsmount
2732          is missing.
2733    
2734    Fix 2011/02/07
2735    
2736        @ Fix infinite loop bug when reading /proc/ccs/audit or /proc/ccs/query .
2737    
2738          In ccs_flush(), head->r.w[0] holds pointer to string data to be printed.
2739          But head->r.w[0] was updated only when the string data was partially
2740          printed (because head->r.w[0] will be updated by head->r.w[1] later if
2741          completely printed). However, regarding /proc/ccs/audit and
2742          /proc/ccs/query , an additional '\0' is printed after the string data was
2743          completely printed. But if free space for read buffer became 0 before
2744          printing the additional '\0', ccs_flush() was returning without updating
2745          head->r.w[0]. As a result, ccs_flush() forever reprints already printed
2746          string data.
2747    
2748    Fix 2011/03/01
2749    
2750        @ Run garbage collector without waiting for /proc/ccs/ users.
2751    
2752          Currently TOMOYO holds SRCU lock upon open() and releases it upon close()
2753          because list elements stored in the "struct ccs_io_buffer" instances are
2754          accessed until close() is called. However, such SRCU usage causes lockdep
2755          to complain about leaving the kernel with SRCU lock held. Therefore,
2756          I changed to hold/release SRCU upon each read()/write() by selectively
2757          deferring kfree() by keeping track of the "struct ccs_io_buffer"
2758          instances.
2759    
2760    Fix 2011/03/05
2761    
2762        @ Support built-in policy configuration.
2763    
2764          To be able to start using enforcing mode from the early stage of boot
2765          sequence, I added support for built-in policy configuration and
2766          activating access control without calling external policy loader program.
2767    
2768          This will be useful for systems where operations which can lead to the
2769          hijacking of the boot sequence are needed before loading the policy.
2770          For example, you can activate immediately after loading the fixed part of
2771          policy which will allow only operations needed for mounting a partition
2772          which contains the variant part of policy and verifying (e.g. running GPG
2773          check) and loading the variant part of policy. Since you can start using
2774          enforcing mode from the beginning, you can reduce the possibility of
2775          hijacking the boot sequence.
2776    
2777    Fix 2011/03/10
2778    
2779        @ Remove /proc/ccs/meminfo interface.
2780    
2781          Please use /proc/ccs/stat interface instead.
2782    
2783    Fix 2011/03/15
2784    
2785        @ Pack policy when printing via /proc/ccs/ interface.
2786    
2787          The kernel side is ready for accepting packed input like
2788    
2789            file read/write/execute /path/to/file
2790    
2791          but was using unpacked output like
2792    
2793            file read /path/to/file
2794            file write /path/to/file
2795            file execute /path/to/file
2796    
2797          because most of userland tools were not ready for accepting packed input.
2798    
2799          The advantages of using packed policy are that it makes policy files
2800          smaller and it speeds up loading/saving policy files.
2801    
2802          Since most of userland tools are ready for accepting packed input by now,
2803          I changed to use packed policy for both input and output.

Legend:
Removed from v.3536  
changed lines
  Added in v.4724

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