TOMOYO Linux(undone)
目录
- . TOMOYO Introduction
- . TOMOYO Sourcecode Analysis
1. Introduction
TOMOYO是一款基于LSM Framework实现的LSMs(安全模块)
Relevant Link:
- http://lxr.free-electrons.com/source/Documentation/security/tomoyo.txt
2. TOMOYO Sourcecode Analysis
以网络连接状态函数(sys_connect)的监控(tomoyo_socket_connect)的监控log作为例子
/source/security/tomoyo/tomoyo.c
- /**
- * tomoyo_socket_connect - Check permission for connect().
- *
- * @sock: Pointer to "struct socket".
- * @addr: Pointer to "struct sockaddr".
- * @addr_len: Size of @addr.
- *
- * Returns 0 on success, negative value otherwise.
- */
- static int tomoyo_socket_connect(struct socket *sock, struct sockaddr *addr, int addr_len)
- {
- return tomoyo_socket_connect_permission(sock, addr, addr_len);
- }
/source/security/tomoyo/network.c
- /**
- * tomoyo_sock_family - Get socket's family.
- *
- * @sk: Pointer to "struct sock".
- *
- * Returns one of PF_INET, PF_INET6, PF_UNIX or 0.
- */
- static u8 tomoyo_sock_family(struct sock *sk)
- {
- u8 family;
- if (tomoyo_kernel_service())
- return 0;
- family = sk->sk_family;
- switch (family)
- {
- case PF_INET:
- case PF_INET6:
- case PF_UNIX:
- return family;
- default:
- return 0;
- }
- }
- /**
- * tomoyo_socket_connect_permission - Check permission for setting the remote address of a socket.
- *
- * @sock: Pointer to "struct socket".
- * @addr: Pointer to "struct sockaddr".
- * @addr_len: Size of @addr.
- *
- * Returns 0 on success, negative value otherwise.
- */
- int tomoyo_socket_connect_permission(struct socket *sock, struct sockaddr *addr, int addr_len)
- {
- struct tomoyo_addr_info address;
- //Get socket's family.(family是链路层的概念)
- const u8 family = tomoyo_sock_family(sock->sk);
- //socket的类型(TCP、UDP...)(type是传输层的概念)
- const unsigned int type = sock->type;
- if (!family)
- return 0;
- address.protocol = type;
- switch (type)
- {
- case SOCK_DGRAM:
- case SOCK_RAW:
- address.operation = TOMOYO_NETWORK_SEND;
- break;
- case SOCK_STREAM:
- case SOCK_SEQPACKET:
- address.operation = TOMOYO_NETWORK_CONNECT;
- break;
- default:
- return 0;
- }
- if (family == PF_UNIX)
- return tomoyo_check_unix_address(addr, addr_len, &address);
- return tomoyo_check_inet_address(addr, addr_len, sock->sk->sk_protocol, &address);
- }
- /* Structure for holding socket address. */
- struct tomoyo_addr_info
- {
- u8 protocol;
- u8 operation;
- struct tomoyo_inet_addr_info inet;
- struct tomoyo_unix_addr_info unix0;
- };
- static int tomoyo_check_inet_address(const struct sockaddr *addr, const unsigned int addr_len, const u16 port, struct tomoyo_addr_info *address)
- {
- struct tomoyo_inet_addr_info *i = &address->inet;
- switch (addr->sa_family)
- {
- case AF_INET6:
- if (addr_len < SIN6_LEN_RFC2133)
- goto skip;
- i->is_ipv6 = true;
- i->address = (__be32 *)((struct sockaddr_in6 *) addr)->sin6_addr.s6_addr;
- i->port = ((struct sockaddr_in6 *) addr)->sin6_port;
- break;
- case AF_INET:
- if (addr_len < sizeof(struct sockaddr_in))
- goto skip;
- i->is_ipv6 = false;
- i->address = (__be32 *) &((struct sockaddr_in *) addr)->sin_addr;
- i->port = ((struct sockaddr_in *) addr)->sin_port;
- break;
- default:
- goto skip;
- }
- if (address->protocol == SOCK_RAW)
- i->port = htons(port);
- return tomoyo_inet_entry(address);
- skip:
- return 0;
- }
Relevant Link:
Copyright (c) 2014 LittleHann All rights reserved
TOMOYO Linux(undone)的更多相关文章
- Linux LSM(Linux Security Modules) Hook Technology
目录 . 引言 . Linux Security Module Framework Introduction . LSM Sourcecode Analysis . LSMs Hook Engine: ...
- Linux Security模块
一.Linux Security Modules Linux Security Modules (LSM) 是一种 Linux 内核子系统,旨在将内核以模块形式集成到各种安全模块中.在 2001 年的 ...
- Logical Volume Manager (Linux)
http://en.wikipedia.org/wiki/Logical_Volume_Manager_(Linux) Logical Volume Manager (Linux) From Wiki ...
- Linux 驱动开发
linux驱动开发总结(一) 基础性总结 1, linux驱动一般分为3大类: * 字符设备 * 块设备 * 网络设备 2, 开发环境构建: * 交叉工具链构建 * NFS和tftp服务器安装 3, ...
- Linaro/Yocto/Openwrt
http://en.wikipedia.org/wiki/Linaro Linaro From Wikipedia, the free encyclopedia This article ap ...
- Linux inode && Fast Directory Travel Method(undone)
目录 . Linux inode简介 . Fast Directory Travel Method 1. Linux inode简介 0x1: 磁盘分割原理 字节 -> 扇区(sector)(每 ...
- Linux Kernel File IO Syscall Kernel-Source-Code Analysis(undone)
目录 . 引言 . open() syscall . close() syscall 0. 引言 在linux的哲学中,所有的磁盘文件.目录.外设设备.驱动设备全部被抽象为了"文件" ...
- Linux Kernel中获取当前目录方法(undone)
目录 . 引言 . 基于进程内存镜像信息struct mm_struct获取struct path调用d_path()获取当前进程的"绝对路径" . 基于文件描述符(fd).tas ...
- Linux Cache Mechanism Summary(undone)
目录 . 缓存机制简介 . 内核缓存机制 . 内存缓存机制 . 文件缓存机制 . 数据库缓存机制 1. 缓存机制简介 0x1: 什么是缓存cache 在计算机整个领域中,缓存(cache)这个词是一个 ...
随机推荐
- IO流的练习3 —— 复制多级文件夹下的指定文件并改名
需求:复制指定目录下的指定文件,并修改后缀名. 指定的文件是:.java文件. 指定的后缀名是:.jad 数据源所在文件夹:C:\Users\Administrator\Desktop\记录 目的地所 ...
- 转:webRTC的前世今生
https://blog.coding.net/blog/getting-started-with-webrtc
- ArcGis 中MapControl 框选
void mCtrl_OnMouseDown(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnMouseDownEvent e) ...
- page-cache层以及各种标志位之间的转换
对真实文件系统层,算是懂了,但是vfs层以及block层还是有点生疏呢,最近要好好分析一下了. page-cache层主要关注文件读写时的行为,包括页的状态之间的变化,何时变脏,何时变成writeba ...
- 【MFC】序列化(Serialize)、反序列化(Deserialize)
1.首先在头文件里面声明 DECLARE_SERIAL(CSelectionSerial) 2.重写CObject的Serialize函数 virtual void Serialize(CArchiv ...
- jQuery调用WCF服务传递JSON对象
下面这个示例使用了WCF去创建一个服务端口从而能够被ASP.Net页面通过jQuery的AJAX方法访问,我们将在客户端使用Ajax技术来 与WCF服务进行通信.这里我们仅使用jQuery去连接Web ...
- 20145208 《Java程序设计》第10周学习总结
20145208 <Java程序设计>第10周学习总结 教材学习内容总结 了解JAVA网络编程的基础知识 这一部分知识的学习在我的实验中有叙述实验五 补充内容: 在现有的网络中,网络通讯的 ...
- win7 多点触摸USB的触摸屏
USB.C 读取bCommon判断执行哪个动作 if (bCommon & rbRSUINT)//0x02 // Handle Resume interrupt { Usb_Resume(); ...
- 【hello,world 也打脸】记storm-starter在某知名IDE下的悲催调试经历
背景 最近收到这样一个问题: Storm处理消息时会根据Topology生成一棵消息树,Storm如何跟踪每个消息.如何保证消息不丢失以及如何实现重发消息机制? 虽已回复,但心想还是看下storm这块 ...
- 原生JS、CSS实现的转盘效果(目前仅支持webkit)
这是一个原生JS.CSS实现的转盘效果(题目在这:http://www.cnblogs.com/arfeizhang/p/turntable.html),花了半个小时左右,准备睡觉,所以先贴一段代码, ...