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

Subversion リポジトリの参照

Diff of /trunk/1.7.x/ccs-patch/security/ccsecurity/realpath.c

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

revision 2551 by kumaneko, Sat May 16 11:30:35 2009 UTC revision 2553 by kumaneko, Sun May 17 08:19:11 2009 UTC
# Line 652  void ccs_put_ipv6_address(const struct i Line 652  void ccs_put_ipv6_address(const struct i
652                  ccs_free_element(ptr);                  ccs_free_element(ptr);
653  }  }
654    
655    /**
656     * ccs_put_condition - Delete memory for "struct ccs_condition_list".
657     *
658     * @cond: Pointer to "struct ccs_condition_list".
659     */
660    void ccs_put_condition(struct ccs_condition_list *cond)
661    {
662            const unsigned long *ptr;
663            const struct ccs_argv_entry *argv;
664            const struct ccs_envp_entry *envp;
665            const struct ccs_symlinkp_entry *symlinkp;
666            u16 condc;
667            u16 argc;
668            u16 envc;
669            u16 symlinkc;
670            u16 i;
671            bool can_delete = false;
672            if (!cond)
673                    return;
674            /***** WRITER SECTION START *****/
675            down_write(&ccs_policy_lock);
676            if (atomic_dec_and_test(&cond->users)) {
677                    list_del(&cond->list);
678                    can_delete = true;
679            }
680            up_write(&ccs_policy_lock);
681            /***** WRITER SECTION END *****/
682            if (!can_delete)
683                    return;
684            condc = cond->head.condc;
685            argc = cond->head.argc;
686            envc = cond->head.envc;
687            symlinkc = cond->head.symlinkc;
688            ptr = (const unsigned long *) (cond + 1);
689            argv = (const struct ccs_argv_entry *) (ptr + condc);
690            envp = (const struct ccs_envp_entry *) (argv + argc);
691            symlinkp = (const struct ccs_symlinkp_entry *) (envp + envc);
692            for (i = 0; i < argc; argv++, i++)
693                    ccs_put_name(argv->value);
694            for (i = 0; i < envc; envp++, i++) {
695                    ccs_put_name(envp->name);
696                    ccs_put_name(envp->value);
697            }
698            for (i = 0; i < symlinkc; symlinkp++, i++)
699                    ccs_put_name(symlinkp->value);
700            ccs_free_element(cond);
701    }
702    
703  static unsigned int ccs_allocated_memory_for_savename;  static unsigned int ccs_allocated_memory_for_savename;
704  static unsigned int ccs_quota_for_savename;  static unsigned int ccs_quota_for_savename;
705    
# Line 1375  static void ccs_cleanup_domain_policy(vo Line 1423  static void ccs_cleanup_domain_policy(vo
1423          up_write(&ccs_policy_lock);          up_write(&ccs_policy_lock);
1424          /***** WRITER SECTION END *****/          /***** WRITER SECTION END *****/
1425          list_for_each_entry_safe(acl, next_acl, &q_acl, list) {          list_for_each_entry_safe(acl, next_acl, &q_acl, list) {
1426                    ccs_put_condition(acl->cond);
1427                  switch (ccs_acl_type1(acl)) {                  switch (ccs_acl_type1(acl)) {
1428                          struct ccs_single_path_acl_record *acl1;                          struct ccs_single_path_acl_record *acl1;
1429                          struct ccs_double_path_acl_record *acl2;                          struct ccs_double_path_acl_record *acl2;

Legend:
Removed from v.2551  
changed lines
  Added in v.2553

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