kernel-3.3.5 에서 security 함수에 대해서 질문있어요?
security 함수인 inode_permission 함수를 후킹하는 모듈을 작성할 때 inode_permission 함수에서
d_path와 ext3(4)_get_inode_loc 함수를 사용하면 시스템이 죽는 현상이 발생합니다.
1) // d_path를 이용할 경우
aaa_inode_permission(struct inode *inode, int mask)
{
..........
if (mask & MAY_EXEC) return 0; <== 추가해 주면 죽지 않음
d_path(&mnt_path, kbuf, 1024);
...........
}
d_path 함수를 추적해서 디버깅 해보니 br_read_lock(vfsmount_lock)을 호출할 때 죽는것 같습니다.
이전 커널(2.6.32) 소스를 찾아보니 spin_lock(&vfsmount_lock)를 사용했었는데, 커널 3.3.5로 버전 업 되면서 br_read_lock(vfsmount_lock)로 사용한거 같습니다.
inode_permission에서 d_path를 사용할 수 있는 방법은 없을까요?
2) // ext3(4)_get_inode_loc를 이용할 경우
aaa_inode_permission(struct inode *inode, int mask)
{
..........
if (mask & MAY_EXEC) return 0; <== 추가해 주면 죽지 않음
if (ext3_get_inode_loc(inode, iloc) return 0;
...........
}
커널 2.6.32에서는 inode_permission 함수에서 d_path와 ext3_get_inode_loc 함수를 사용해도 괜찮았으나, 커널 3.x에서
사용하면 시스템이 죽는지 궁금합니다.
aaa_inode_security security 함수에서 ext3(4)_get_inode_loc를 사용해서 모듈을 업로드 하면 바로 죽지는 않으나, 리부팅시 시스템이 죽습니다.
이유가 궁금합니다.
커널 3.x에서 inode_permission 함수 사용시 d_path와 ext3_get_inode_loc 함수를 이용해야 하는지 고수님들의 조언 부탁드립니다.
수고하세요.
댓글 달기