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

Subversion リポジトリの参照

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

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

branches/ccs-patch/README.ccs revision 3869 by kumaneko, Thu Jul 29 13:29:11 2010 UTC trunk/1.8.x/ccs-patch/README.ccs revision 6009 by kumaneko, Sun Apr 22 11:37:55 2012 UTC
# Line 797  Fix 2007/01/26 Line 797  Fix 2007/01/26
797        I was using PAGE_SIZE (4096 in many environments)        I was using PAGE_SIZE (4096 in many environments)
798        as the max length of any string data.        as the max length of any string data.
799        But for environments that have larger PAGE_SIZE,        But for environments that have larger PAGE_SIZE,
800        doing memset(ptr, 0, PAGE_SIZE) everytime is too wasteful.        doing memset(ptr, 0, PAGE_SIZE) every time is too wasteful.
801    
802  Fix 2007/01/29  Fix 2007/01/29
803    
# 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 2382  Fix 2010/03/26 Line 2382  Fix 2010/03/26
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.  Version 1.7.2 2010/04/01   Feature enhancement release.
2386    
2387  Fix 2010/04/10  Fix 2010/04/10
2388    
# Line 2441  Fix 2010/06/09 Line 2441  Fix 2010/06/09
2441        permissions (e.g. allow_env PATH if symlink.target="/"), it triggered        permissions (e.g. allow_env PATH if symlink.target="/"), it triggered
2442        NULL pointer dereference.        NULL pointer dereference.
2443    
2444  Fix 2010/07/29  Fix 2010/10/28
2445    
2446      @ Change keyword syntax.      @ 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        I removed "allow_" prefix from directives. New directives for files are
2472        prefixed with "file ". For example, "allow_read" changed to "file read",        prefixed with "file ". For example, "allow_read" changed to "file read",
2473        "allow_ioctl" changed to "file ioctl". New directive for "allow_network"        "allow_ioctl" changed to "file ioctl". New directive for "allow_network
2474        is "network". New directive for "allow_env" is "misc env". New directive        TCP" is "network inet stream", "allow_network UDP" is "network inet
2475        for "allow_signal" is "ipc signal". New directive for "allow_capability"        dgram", "allow_network RAW" is "network inet raw". New directive for
2476        is "capability". These directives correspond with keywords used by        "allow_env" is "misc env". New directive for "allow_signal" is "ipc
2477        profile's CONFIG lines.        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        I removed "deny_rewrite" and "allow_rewrite" directives and introduced
2481        "file append" directive. Thus, permission for open(O_WRONLY | O_APPEND)        "file append" directive. Thus, permission for open(O_WRONLY | O_APPEND)
# Line 2467  Fix 2010/07/29 Line 2491  Fix 2010/07/29
2491        check requires hooks in filesystem part while almost all hooks for        check requires hooks in filesystem part while almost all hooks for
2492        filesystem part have moved to LSM by Linux 2.6.34.        filesystem part have moved to LSM by Linux 2.6.34.
2493    
2494      @ Distinguish send() and recv() operations for UDP and IP protocols.        New directive for "execute_handler" is "task auto_execute_handler",
2495          "denied_execute_handler" is "task denied_execute_handler".
2496    
2497        Until now, it was impossible for UDP and IP protocols to allow either      @ 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        only sending or only receiving because permissions were aggregated with
2501        "connect" keyword. I broke "connect" keyword into "send" and "recv"        "connect" keyword. I broke "connect" keyword into "send" and "recv"
2502        keywords so that you can keep access control for send() operation enabled        keywords so that you can keep access control for send() operation enabled
2503        when you have to turn access control for recv() operation off due to        when you have to disable access control for recv() operation due to
2504        application breakage by filtering incoming datagram.        application breakage by discarding incoming datagram.
2505    
2506      @ Wait for next connection/datagram if current connection/datagram was      @ Add Unix domain socket restriction support.
       discarded.  
2507    
2508        Regarding "network TCP accept", "network UDP recv", "network RAW recv"        Until now, it was possible to restrict only inet domain sockets (i.e.
2509        keywords, I modified to wait for next connection/datagram if current        TCP/UDP/RAW). I added restriction for Unix domain sockets (i.e. stream/
2510        connection/datagram was discarded. LSM hooks for these keywords are        dgram/seqpacket). New directive "network unix" is added as well as
2511        currently missing because this behavior may break applications.        "network inet" directive.
       If you found applications broken by this behavior, you can set  
       CONFIG::network::inet_tcp_accept and/or CONFIG::network::inet_udp_recv  
       and/or CONFIG::network::inet_raw_recv to mode=disabled in order to  
       disable filtering for incoming connection/datagram.  
2512    
2513      @ Allow specifying multiple permissions in a line.      @ Allow specifying multiple permissions in a line.
2514    
# Line 2525  Fix 2010/07/29 Line 2547  Fix 2010/07/29
2547    
2548      @ Add a new keyword "any" for domain transition control.      @ Add a new keyword "any" for domain transition control.
2549    
2550        To be able to make it easier to apply execute_handler on each domain,        To be able to make it easier to apply auto_execute_handler on each
2551        I added "any" keyword to domain transition control keywords. Now,        domain, I added "any" keyword to domain transition control keywords. Now,
2552        "initialize_domain /usr/sbin/sshd" changed to        "initialize_domain /usr/sbin/sshd" changed to
2553        "initialize_domain /usr/sbin/sshd from any" and        "initialize_domain /usr/sbin/sshd from any" and
2554        "keep_domain <kernel> /usr/sbin/sshd /bin/bash" changed to        "keep_domain <kernel> /usr/sbin/sshd /bin/bash" changed to
2555        "keep_domain any from <kernel> /usr/sbin/sshd /bin/bash".        "keep_domain any from <kernel> /usr/sbin/sshd /bin/bash".
2556    
2557        "keep_domain /path/to/execute_handler from any" will allow you to apply        "keep_domain /path/to/auto_execute_handler from any" will allow you to
2558        execute_handler for any domains without creating domains for        apply auto_execute_handler for any domains without creating domains for
2559        execute_handler.        auto_execute_handler.
2560    
2561      @ Change buffering mode for reading policy.      @ Change buffering mode for reading policy.
2562    
# Line 2555  Fix 2010/07/29 Line 2577  Fix 2010/07/29
2577        the exception policy and specify "use_group 0" from the domains in the        the exception policy and specify "use_group 0" from the domains in the
2578        domain policy.        domain policy.
2579    
2580        "ignore_global_allow_read" and "ignore_global_allow_env" keywords were        "ignore_global_allow_read" and "ignore_global_allow_env" directives were
2581        removed from domain policy and "use_group" keyword was added.        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      @ Allow controlling generation of access granted logs for per an entry
2609        basis.        basis.
2610    
2611        I added per-entry flag which controls generation of grant logs because        I added per-entry flag which controls generation of grant logs because
2612        Xen and KVM issues ioctl requests so frequently. For example,        Xen and KVM issues ioctl requests so frequently. For example,
2613    
2614          file ioctl /dev/null 0x5401 ; set audit=no          file ioctl /dev/null 0x5401 grant_log=no
2615    
2616        will suppress /proc/ccs/grant_log even if profile says grant_log=yes .        will suppress /proc/ccs/grant_log even if preference says grant_log=yes .
2617    
2618          file ioctl /dev/null 0x5401 ; set audit=yes          file ioctl /dev/null 0x5401 grant_log=yes
2619    
2620        will generate /proc/ccs/grant_log even if profile says grant_log=no .        will generate /proc/ccs/grant_log even if preference says grant_log=no .
2621    
2622          file ioctl /dev/null 0x5401          file ioctl /dev/null 0x5401
2623    
2624        will generate /proc/ccs/grant_log only if profile says grant_log=yes .        will generate /proc/ccs/grant_log only if preference says grant_log=yes .
2625    
2626        This flag is intended for frequently accessed resources like        This flag is intended for frequently accessed resources like
2627    
2628          file read /var/www/html/\{\*\}/\*.html ; set audit=no          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.      @ Optimize for object's size.
2687    
2688        I merged similar code in order to reduce object's filesize.        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.
2804    
2805    Fix 2011/03/31
2806    
2807        @ Fix conditional policy parsing.
2808    
2809          Since exec.realpath= and symlink.target= accept path_group,
2810          symlink.target="@foo" was by error parsed as symlink.target=@foo .
2811    
2812        @ Serialize updating profile's comment line.
2813    
2814          We need to serialize when updating COMMENT= line in /proc/ccs/profile .
2815    
2816    Version 1.8.1   2011/04/01   Usability enhancement with "Zettai, Daijoubudayo" release!
2817    
2818    Fix 2011/04/03
2819    
2820        @ Fix fcntl(F_SETFL, O_APPEND) handling.
2821    
2822          Since 1.8.0, TOMOYO was by error checking "file write" permission rather
2823          than "file append" permission when changing file's writing mode from
2824          "overwriting" to "append".
2825    
2826          This error should impact little (except CentOS 6.0 kernels) because once
2827          a file was opened for "overwriting" mode, changing that file to "append"
2828          mode cannot undo overwriting the file. Regarding CentOS 6.0 kernels,
2829          due to different ACC_MODE definition, TOMOYO was by error needlessly
2830          checking "file read" permission when fcntl() was requested.
2831    
2832    Fix 2011/04/20
2833    
2834        @ Remove unused "struct inode *" parameter from hooks.
2835    
2836          Since pre-vfs functions were removed on 2010/09/18, "struct inode *"
2837          parameter which was used for checking parent directory's DAC permission
2838          is no longer used.
2839    
2840          Note that "struct ccsecurity_operations ccsecurity_ops" has changed.
2841          Loadable kernel modules that depends on it need to be rebuilt.
2842    
2843    Fix 2011/05/05
2844    
2845        @ Fix wrong profile number in audit logs for "misc env" permission.
2846    
2847          Profile number used for "file execute" permission was by error reused
2848          when generating audit logs for "misc env" permission.
2849    
2850    Fix 2011/05/11
2851    
2852        @ Fix wrong domainname validation.
2853    
2854          "<kernel>" + "/foo/\" + "/bar" was by error checked when
2855          "<kernel> /foo/\* /bar" was given. As a result, legal domainnames like
2856          "<kernel> /foo/\* /bar" are rejected.
2857    
2858    Fix 2011/06/06
2859    
2860        @ Add policy namespace support.
2861    
2862          To be able to use TOMOYO in LXC environments, I introduced policy
2863          namespace. Each policy namespace has its own set of domain policy,
2864          exception policy and profiles, which are all independent of other
2865          namespaces.
2866    
2867        @ Remove CONFIG_CCSECURITY_BUILTIN_INITIALIZERS option.
2868    
2869          From now on, exception policy and manager need to be able to handle
2870          policy namespace (which is a <$namespace> prefix added to each line).
2871          Thus, space-separated list for CONFIG_CCSECURITY_BUILTIN_INITIALIZERS is
2872          no longer suitable for handling policy namespace.
2873    
2874    Fix 2011/06/10
2875    
2876        @ Allow specifying trigger for activation.
2877    
2878          To be able to use TOMOYO under systemd environments where init= parameter
2879          is used, I changed to allow overriding the trigger for calling external
2880          policy loader and activating MAC via kernel command line options.
2881    
2882    Fix 2011/06/14
2883    
2884        @ Remove unused "struct inode *" parameter from ccs-patch-\*.diff .
2885    
2886          To follow changes I made on 2011/04/20, I removed "struct inode *" from
2887          ccs_mknod_permission(), ccs_mkdir_permission(), ccs_rmdir_permission(),
2888          ccs_unlink_permission(), ccs_symlink_permission(), ccs_link_permission(),
2889          ccs_rename_permission() that are called from fs/namei.c
2890          net/unix/af_unix.c include/linux/security.c security/security.c .
2891          If you have your own ccs-patch-*.diff , please update accordingly.
2892    
2893    Version 1.8.2   2011/06/20   Usability enhancement release.
2894    
2895    Fix 2011/07/07
2896    
2897        @ Remove /proc/ccs/.domain_status interface.
2898    
2899          Writing to /proc/ccs/.domain_status can be emulated by
2900    
2901            ( echo "select " $domainname; echo "use_profile " $profile ) |
2902            /usr/sbin/ccs-loadpolicy -d
2903    
2904          and reading from /proc/ccs/.domain_status can be emulated by
2905    
2906            grep -A 1 '^<' /proc/ccs/domain_policy |
2907            awk ' { if ( domainname == "" ) { if ( substr($1, 1, 1) == "<" )
2908            domainname = $0; } else if ( $1 == "use_profile" ) {
2909            print $2 " " domainname; domainname = ""; } } ; '
2910    
2911          . Since this interface is used by only /usr/sbin/ccs-setprofile ,
2912          remove this interface by updating /usr/sbin/ccs-setprofile .
2913    
2914    Fix 2011/07/09
2915    
2916        @ Fix /proc/ccs/stat parser.
2917    
2918          For optimization, I changed to use simple_strtoul() rather than sscanf()
2919          in ccs_write_stat(). But it caused parsing failure if space is inserted
2920          before value (e.g. "Memory used by policy: $value").
2921    
2922    Fix 2011/07/13
2923    
2924        @ Accept "::" notation for IPv6 address.
2925    
2926          In order to add network access restriction to TOMOYO 2.4, I backported
2927          routines for parsing/printing IPv4/IPv6 address from kernel 3.0 into
2928          TOMOYO 1.8.2.
2929          Now, IPv6 address accepts "::1" instead of "0:0:0:0:0:0:0:1".
2930    
2931    Fix 2011/09/03
2932    
2933        @ Avoid race when retrying "file execute" permission check.
2934    
2935          There was a race window that the pathname which is subjected to
2936          "file execute" permission check when retrying via supervisor's decision
2937          because the pathname was recalculated upon retry. Though, there is an
2938          inevitable race window even without supervisor, for we have to calculate
2939          the symbolic link's pathname from "struct linux_binprm"->filename rather
2940          than from "struct linux_binprm"->file because we cannot back calculate
2941          the symbolic link's pathname from the dereferenced pathname.
2942    
2943        @ Remove unneeded daemonize().
2944    
2945          Garbage collector thread is created using kthread_create() since 2.6.7.
2946          Kernel threads created by kthread_create() does not need to call
2947          daemonize().
2948    
2949    Fix 2011/09/16
2950    
2951        @ Allow specifying domain transition preference.
2952    
2953          I got an opinion that it is difficult to use exception policy's domain
2954          transition control directives because they need to match the pathname
2955          specified to "file execute" directives. For example, if "file execute
2956          /bin/\*\-ls\-cat" is given, corresponding domain transition control
2957          directive needs to be like "no_keep_domain /bin/\*\-ls\-cat from any".
2958    
2959          To solve this difficulty, I introduced optional argument that supersedes
2960          exception policy's domain transition control directives.
2961    
2962            file execute /bin/ls keep exec.realpath="/bin/ls" exec.argv[0]="ls"
2963            file execute /bin/cat keep exec.realpath="/bin/cat" exec.argv[0]="cat"
2964            file execute /bin/\*\-ls\-cat child
2965            file execute /usr/sbin/httpd <apache> exec.realpath="/usr/sbin/httpd" exec.argv[0]="/usr/sbin/httpd"
2966    
2967          This argument allows transition to different domains based on conditions.
2968    
2969            <kernel> /usr/sbin/sshd
2970            file execute /bin/bash <kernel> /usr/sbin/sshd //batch-session exec.argc=2 exec.argv[1]="-c"
2971            file execute /bin/bash <kernel> /usr/sbin/sshd //root-session task.uid=0
2972            file execute /bin/bash <kernel> /usr/sbin/sshd //nonroot-session task.uid!=0
2973    
2974    Fix 2011/09/25
2975    
2976        @ Simplify garbage collector.
2977    
2978          It turned out that use of batched processing tends to choke garbage
2979          collector when certain pattern of entries are queued. Thus, I replaced it
2980          with sequential processing.
2981    
2982    Version 1.8.3   2011/09/29   Usability enhancement release.
2983    
2984    Fix 2011/10/24
2985    
2986        @ Fix incomplete read after seek.
2987    
2988          ccs_flush() tries to flush data to be read as soon as possible.
2989          ccs_select_domain() (which is called by write()) enqueues data which
2990          meant to be read by next read(), but previous read()'s read buffer's
2991          size was not cleared. As a result, since 1.8.0, sequence like
2992    
2993            char *cp = "select global-pid=1\n";
2994            read(fd, buf1, sizeof(buf1));
2995            write(fd, cp, strlen(cp));
2996            read(fd, buf2, sizeof(buf2));
2997    
2998          causes enqueued data to be flushed to buf1 rather than buf2.
2999    
3000        @ Use query id for reaching target process's domain policy.
3001    
3002          Use query id for reaching target process's domain policy rather than
3003          target process's global PID. This is for synchronizing with TOMOYO 2.x,
3004          but this change makes /usr/sbin/ccs-queryd more reliable because the
3005          kernel will return empty domain policy when the query has expired before
3006          ccs-queryd reaches target process's domain policy.
3007    
3008        @ Fix quota counting.
3009    
3010          "task manual_domain_transition" should not be counted for quota as with
3011          "task auto_domain_transition"/"task auto_execute_handler"/
3012          "task denied_execute_handler" because these are not appended by learning
3013          mode.
3014    
3015    Fix 2011/11/11
3016    
3017        @ Optimize for object's size.
3018    
3019          I rearranged functions/variables into three groups in order to reduce
3020          object's filesize. Also, I added kernel config options for reducing more
3021          by excluding unnecessary functionality.
3022    
3023    Fix 2011/11/18
3024    
3025        @ Fix kernel config mapping error.
3026    
3027          Due to a typo in ccs_p2mac definition, mode for CONFIG::file::execute was
3028          by error used when checking "file getattr" permission. Most users will
3029          not be affected by this error because CONFIG::file::execute and
3030          CONFIG::file::getattr are by default configured to use CONFIG::file or
3031          CONFIG settings.
3032    
3033    Fix 2011/12/13
3034    
3035        @ Follow __d_path() behavior change. (Only 2.6.36 and later)
3036    
3037          The behavior of __d_path() has changed in 3.2-rc5. __d_path() now returns
3038          NULL when the pathname cannot be calculated. You must update to this
3039          version when using with 3.2-rc5 and later kernels, or the kernel will
3040          panic because ccs_get_absolute_path() triggers NULL pointer dereference.
3041    
3042          The patch that changed the behavior of __d_path() might be backported to
3043          2.6.36 to 3.1 kernels. You must update to this version if the patch was
3044          backported, or you will experience the kernel panic as with 3.2-rc5.
3045    
3046          The patch that changed the behavior of __d_path() also changed the way of
3047          handling pathnames under lazy-unmounted directory. Until now, TOMOYO was
3048          using incomplete pathnames returned by __d_path() when the pathname is
3049          under lazy-unmounted directory. But from now on, TOMOYO uses different
3050          pathnames returned by ccs_get_local_path() when the pathname is under
3051          lazy-unmounted directory (because __d_path() no longer returns it).
3052    
3053          Since applications unlikely do lazy unmounts, requesting pathnames under
3054          lazy-unmounted directory should not happen unless the administrator
3055          explicitly does lazy unmounts. But pathnames which is defined for such
3056          conditions in the policy file (if any) will need to be rewritten.
3057    
3058    Fix 2012/01/20
3059    
3060        @ Follow changes in 3.3-rc1.
3061    
3062          Use umode_t rather than mode_t.
3063          Remove ipv6_addr_copy() usage.
3064    
3065    Fix 2012/02/25
3066    
3067        @ Follow changes in linux-next.
3068    
3069          UMH_WAIT_PROC constant (currently 1) is scheduled for renumbering in 3.4.
3070    
3071          Use UMH_WAIT_PROC constant instead of hardcoded constant in preparation
3072          for backporting call_usermodehelper() related changes. If renumbering was
3073          backported, you will start experiencing the kernel panic upon execution
3074          of external policy loader (i.e. /sbin/ccs-init), for the kernel will no
3075          longer wait for completion of external policy loader process.
3076    
3077          Although I changed to use UMH_WAIT_PROC constant, this change could fail
3078          to detect renumbering in 2.6.22 and earlier kernels, for UMH_WAIT_PROC
3079          constant is currently available to only 2.6.23 and later kernels. If you
3080          started to experience the kernel panic, please check whether renumbering
3081          was backported or not.
3082    
3083    Fix 2012/02/29
3084    
3085        @ Fix mount flags checking order.
3086    
3087          Userspace can pass in arbitrary combinations of MS_* flags to mount().
3088    
3089          If both MS_BIND and one of MS_SHARED/MS_PRIVATE/MS_SLAVE/MS_UNBINDABLE
3090          are passed, device name which should be checked for MS_BIND was not
3091          checked because MS_SHARED/MS_PRIVATE/MS_SLAVE/MS_UNBINDABLE had higher
3092          priority than MS_BIND.
3093    
3094          If both one of MS_BIND/MS_MOVE and MS_REMOUNT are passed, device name
3095          which should not be checked for MS_REMOUNT was checked because MS_BIND/
3096          MS_MOVE had higher priority than MS_REMOUNT.
3097    
3098          Fix these bugs by changing priority to MS_REMOUNT -> MS_BIND ->
3099          MS_SHARED/MS_PRIVATE/MS_SLAVE/MS_UNBINDABLE -> MS_MOVE as with do_mount()
3100          does. Also, I changed to unconditionally return -EINVAL if more than one
3101          of MS_SHARED/MS_PRIVATE/MS_SLAVE/MS_UNBINDABLE is passed so that TOMOYO
3102          will not generate inaccurate audit logs, for commit 7a2e8a8f "VFS: Sanity
3103          check mount flags passed to change_mnt_propagation()" clarified that
3104          these flags must be exclusively passed.
3105    
3106    Fix 2012/03/08
3107    
3108        @ Allow returning other errors when ptrace permission cannot be checked.
3109    
3110          Currently -EPERM is returned when ccs_ptrace_permission() returned an
3111          error code. I changed to return return value from ccs_ptrace_permission()
3112          so that we can return -ESRCH when target process was not found.
3113    
3114    Fix 2012/03/16
3115    
3116        @ Return appropriate value to poll().
3117    
3118          Return POLLIN | POLLRDNORM | POLLOUT | POLLWRNORM if ready to read/write,
3119          POLLOUT | POLLWRNORM otherwise.
3120    
3121    Fix 2012/04/22
3122    
3123        @ Readd RHEL_MINOR/AX_MINOR checks.
3124    
3125          This check was added in revision 3741 and was removed in revision 4084.
3126    
3127          Add it back in order to support RHEL 5.0, 5.1, 5.2 kernels.

Legend:
Removed from v.3869  
changed lines
  Added in v.6009

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