Kentaro Takeda
k.tak****@gmail*****
2007年 3月 2日 (金) 17:41:16 JST
何度も申し訳ありません。武田です。 パッチの作り方を間違っておりました。今度こそ決定版です。 カーネルのルートディレクトリにgetpattern.txtを置いて、 patch -p1 < getpattern.txt であたります。 07/03/02 に Kentaro Takeda<k.tak****@gmail*****> さんは書きました: > うおっ。Gmail君がパッチに改行を入れてくださった…。 > ということで添付ファイルで送りなおします。内容は同一です。 > > 07/03/02 に Kentaro Takeda<k.tak****@gmail*****> さんは書きました: > > tomoyo-devの皆さま、武田です。 > > 開発者が増えてにぎやかになってきそうですね。 > > > > 仕様変更/性能改善パッチです。 > > > > [Tomoyo-dev 8]の引用 > > >・対話的にアクセス要求の可否を指示する ccs-queryd に関して > > > 「ポリシーに追加した上でアクセス要求を許可」する際に、 > > > 必要に応じてポリシーを編集できるようにしてみました。 > > > > これに伴い、ccs-querydに渡されるパス名は例外ポリシのfile_patternを > > 参照しないようにしたほうがよさそうですよね。 > > 対話的に追加するときにアクセス許可をユーザが任意に編集できるので。 > > また、今の実装では、学習モードでなくても、許可がないアクセスに対しては > > GetPatternという重たい関数を呼んでいるので、 > > これを学習モードの時だけ呼ぶようにすることで性能が改善するはずです。 > > > > ということで、パッチを作成しました。 > > > > これをあてると以下のように変わります。 > > ・ccs-querydにはパターンを含まない絶対パスがわたるようになる。 > > ・学習モード以外ではGetPatternを呼ばないので、 > > アクセス許可がないアクセスに対する処理が早くなる > > > > どんなもんでしょう? > > > > --- fs/tomoyo_file.c.orig 2007-02-14 00:00:00.000000000 +0900 > > +++ fs/tomoyo_file.c 2007-03-02 14:40:19.000000000 +0900 > > @@ -627,13 +627,15 @@ static int CheckFilePerm2(const struct p > > if (error) { > > struct domain_info * const domain = current->domain_info; > > const int is_enforce = CheckCCSEnforce(CCS_TOMOYO_MAC_FOR_FILE); > > - /* Don't use patterns if execution bit is on. */ > > - const struct path_info *patterned_file = ((perm & 1) > > == 0) ? GetPattern(filename) : filename; > > if (TomoyoVerboseMode()) { > > printk("TOMOYO-%s: Access %d(%s) to %s denied > > for %s\n", GetMSG(is_enforce), perm, operation, filename->name, > > GetLastName(domain)); > > } > > - if (is_enforce) error = CheckSupervisor("%s\n%d %s\n", > > domain->domainname->name, perm, patterned_file->name); > > - else if (CheckCCSAccept(CCS_TOMOYO_MAC_FOR_FILE)) > > AddFileACL(patterned_file->name, perm, domain, 1, NULL); > > + if (is_enforce) error = CheckSupervisor("%s\n%d %s\n", > > domain->domainname->name, perm, filename->name); > > + else if (CheckCCSAccept(CCS_TOMOYO_MAC_FOR_FILE)) { > > + /* Don't use patterns if execution bit is on. */ > > + const struct path_info *patterned_file = > > ((perm & 1) == 0) ? GetPattern(filename) : filename; > > + AddFileACL(patterned_file->name, perm, domain, 1, NULL); > > + } > > if (!is_enforce) error = 0; > > } > > return error; > > > > -------------- next part -------------- --- old/fs/tomoyo_file.c 2007-02-14 00:00:00.000000000 +0900 +++ new/fs/tomoyo_file.c 2007-03-02 14:40:19.000000000 +0900 @@ -627,13 +627,15 @@ if (error) { struct domain_info * const domain = current->domain_info; const int is_enforce = CheckCCSEnforce(CCS_TOMOYO_MAC_FOR_FILE); - /* Don't use patterns if execution bit is on. */ - const struct path_info *patterned_file = ((perm & 1) == 0) ? GetPattern(filename) : filename; if (TomoyoVerboseMode()) { printk("TOMOYO-%s: Access %d(%s) to %s denied for %s\n", GetMSG(is_enforce), perm, operation, filename->name, GetLastName(domain)); } - if (is_enforce) error = CheckSupervisor("%s\n%d %s\n", domain->domainname->name, perm, patterned_file->name); - else if (CheckCCSAccept(CCS_TOMOYO_MAC_FOR_FILE)) AddFileACL(patterned_file->name, perm, domain, 1, NULL); + if (is_enforce) error = CheckSupervisor("%s\n%d %s\n", domain->domainname->name, perm, filename->name); + else if (CheckCCSAccept(CCS_TOMOYO_MAC_FOR_FILE)) { + /* Don't use patterns if execution bit is on. */ + const struct path_info *patterned_file = ((perm & 1) == 0) ? GetPattern(filename) : filename; + AddFileACL(patterned_file->name, perm, domain, 1, NULL); + } if (!is_enforce) error = 0; } return error;