diff options
Diffstat (limited to 'include')
| -rw-r--r-- | include/asm-arm/arch-omap/clock.h | 2 | ||||
| -rw-r--r-- | include/asm-ia64/meminit.h | 7 | ||||
| -rw-r--r-- | include/asm-ia64/pal.h | 7 | ||||
| -rw-r--r-- | include/asm-ia64/sn/xpc.h | 4 | ||||
| -rw-r--r-- | include/asm-ia64/system.h | 2 | ||||
| -rw-r--r-- | include/linux/audit.h | 43 | ||||
| -rw-r--r-- | include/linux/fsnotify.h | 6 | ||||
| -rw-r--r-- | include/linux/kobject.h | 2 | ||||
| -rw-r--r-- | include/linux/netfilter_bridge.h | 1 | ||||
| -rw-r--r-- | include/linux/pci_ids.h | 1 | ||||
| -rw-r--r-- | include/linux/security.h | 40 | ||||
| -rw-r--r-- | include/linux/skbuff.h | 33 | ||||
| -rw-r--r-- | include/linux/usb.h | 7 | ||||
| -rw-r--r-- | include/linux/usb_usual.h | 4 | ||||
| -rw-r--r-- | include/linux/videodev.h | 7 | ||||
| -rw-r--r-- | include/linux/videodev2.h | 2 | ||||
| -rw-r--r-- | include/media/v4l2-dev.h | 7 | ||||
| -rw-r--r-- | include/net/af_unix.h | 6 | ||||
| -rw-r--r-- | include/net/ip6_route.h | 12 | ||||
| -rw-r--r-- | include/net/ipv6.h | 3 | ||||
| -rw-r--r-- | include/net/netdma.h | 2 | ||||
| -rw-r--r-- | include/net/netevent.h | 33 | ||||
| -rw-r--r-- | include/net/scm.h | 29 | ||||
| -rw-r--r-- | include/net/tcp.h | 3 |
24 files changed, 205 insertions, 58 deletions
diff --git a/include/asm-arm/arch-omap/clock.h b/include/asm-arm/arch-omap/clock.h index 3c4eb9fbe48a..f83003f5287b 100644 --- a/include/asm-arm/arch-omap/clock.h +++ b/include/asm-arm/arch-omap/clock.h | |||
| @@ -48,8 +48,6 @@ struct clk_functions { | |||
| 48 | }; | 48 | }; |
| 49 | 49 | ||
| 50 | extern unsigned int mpurate; | 50 | extern unsigned int mpurate; |
| 51 | extern struct list_head clocks; | ||
| 52 | extern spinlock_t clockfw_lock; | ||
| 53 | 51 | ||
| 54 | extern int clk_init(struct clk_functions * custom_clocks); | 52 | extern int clk_init(struct clk_functions * custom_clocks); |
| 55 | extern int clk_register(struct clk *clk); | 53 | extern int clk_register(struct clk *clk); |
diff --git a/include/asm-ia64/meminit.h b/include/asm-ia64/meminit.h index 894bc4d89dc0..6a33a07b3f1d 100644 --- a/include/asm-ia64/meminit.h +++ b/include/asm-ia64/meminit.h | |||
| @@ -56,6 +56,11 @@ extern void efi_memmap_init(unsigned long *, unsigned long *); | |||
| 56 | extern struct page *vmem_map; | 56 | extern struct page *vmem_map; |
| 57 | extern int find_largest_hole (u64 start, u64 end, void *arg); | 57 | extern int find_largest_hole (u64 start, u64 end, void *arg); |
| 58 | extern int create_mem_map_page_table (u64 start, u64 end, void *arg); | 58 | extern int create_mem_map_page_table (u64 start, u64 end, void *arg); |
| 59 | extern int vmemmap_find_next_valid_pfn(int, int); | ||
| 60 | #else | ||
| 61 | static inline int vmemmap_find_next_valid_pfn(int node, int i) | ||
| 62 | { | ||
| 63 | return i + 1; | ||
| 64 | } | ||
| 59 | #endif | 65 | #endif |
| 60 | |||
| 61 | #endif /* meminit_h */ | 66 | #endif /* meminit_h */ |
diff --git a/include/asm-ia64/pal.h b/include/asm-ia64/pal.h index 37e52a2836b0..20a8d618c845 100644 --- a/include/asm-ia64/pal.h +++ b/include/asm-ia64/pal.h | |||
| @@ -1433,7 +1433,12 @@ typedef union pal_version_u { | |||
| 1433 | } pal_version_u_t; | 1433 | } pal_version_u_t; |
| 1434 | 1434 | ||
| 1435 | 1435 | ||
| 1436 | /* Return PAL version information */ | 1436 | /* |
| 1437 | * Return PAL version information. While the documentation states that | ||
| 1438 | * PAL_VERSION can be called in either physical or virtual mode, some | ||
| 1439 | * implementations only allow physical calls. We don't call it very often, | ||
| 1440 | * so the overhead isn't worth eliminating. | ||
| 1441 | */ | ||
| 1437 | static inline s64 | 1442 | static inline s64 |
| 1438 | ia64_pal_version (pal_version_u_t *pal_min_version, pal_version_u_t *pal_cur_version) | 1443 | ia64_pal_version (pal_version_u_t *pal_min_version, pal_version_u_t *pal_cur_version) |
| 1439 | { | 1444 | { |
diff --git a/include/asm-ia64/sn/xpc.h b/include/asm-ia64/sn/xpc.h index 8406f1ef4caf..b72af597878d 100644 --- a/include/asm-ia64/sn/xpc.h +++ b/include/asm-ia64/sn/xpc.h | |||
| @@ -1124,8 +1124,8 @@ xpc_notify_IRQ_send_local(struct xpc_channel *ch, u8 ipi_flag, | |||
| 1124 | #define XPC_GET_IPI_FLAGS(_amo, _c) ((u8) (((_amo) >> ((_c) * 8)) & 0xff)) | 1124 | #define XPC_GET_IPI_FLAGS(_amo, _c) ((u8) (((_amo) >> ((_c) * 8)) & 0xff)) |
| 1125 | #define XPC_SET_IPI_FLAGS(_amo, _c, _f) (_amo) |= ((u64) (_f) << ((_c) * 8)) | 1125 | #define XPC_SET_IPI_FLAGS(_amo, _c, _f) (_amo) |= ((u64) (_f) << ((_c) * 8)) |
| 1126 | 1126 | ||
| 1127 | #define XPC_ANY_OPENCLOSE_IPI_FLAGS_SET(_amo) ((_amo) & 0x0f0f0f0f0f0f0f0f) | 1127 | #define XPC_ANY_OPENCLOSE_IPI_FLAGS_SET(_amo) ((_amo) & __IA64_UL_CONST(0x0f0f0f0f0f0f0f0f)) |
| 1128 | #define XPC_ANY_MSG_IPI_FLAGS_SET(_amo) ((_amo) & 0x1010101010101010) | 1128 | #define XPC_ANY_MSG_IPI_FLAGS_SET(_amo) ((_amo) & __IA64_UL_CONST(0x1010101010101010)) |
| 1129 | 1129 | ||
| 1130 | 1130 | ||
| 1131 | static inline void | 1131 | static inline void |
diff --git a/include/asm-ia64/system.h b/include/asm-ia64/system.h index fc9677bc87ee..384fbf7f2a0f 100644 --- a/include/asm-ia64/system.h +++ b/include/asm-ia64/system.h | |||
| @@ -24,7 +24,7 @@ | |||
| 24 | * 0xa000000000000000+2*PERCPU_PAGE_SIZE | 24 | * 0xa000000000000000+2*PERCPU_PAGE_SIZE |
| 25 | * - 0xa000000000000000+3*PERCPU_PAGE_SIZE remain unmapped (guard page) | 25 | * - 0xa000000000000000+3*PERCPU_PAGE_SIZE remain unmapped (guard page) |
| 26 | */ | 26 | */ |
| 27 | #define KERNEL_START (GATE_ADDR+0x100000000) | 27 | #define KERNEL_START (GATE_ADDR+__IA64_UL_CONST(0x100000000)) |
| 28 | #define PERCPU_ADDR (-PERCPU_PAGE_SIZE) | 28 | #define PERCPU_ADDR (-PERCPU_PAGE_SIZE) |
| 29 | 29 | ||
| 30 | #ifndef __ASSEMBLY__ | 30 | #ifndef __ASSEMBLY__ |
diff --git a/include/linux/audit.h b/include/linux/audit.h index b27d7debc5a1..64f9f9e56ac5 100644 --- a/include/linux/audit.h +++ b/include/linux/audit.h | |||
| @@ -327,21 +327,31 @@ extern void __audit_getname(const char *name); | |||
| 327 | extern void audit_putname(const char *name); | 327 | extern void audit_putname(const char *name); |
| 328 | extern void __audit_inode(const char *name, const struct inode *inode); | 328 | extern void __audit_inode(const char *name, const struct inode *inode); |
| 329 | extern void __audit_inode_child(const char *dname, const struct inode *inode, | 329 | extern void __audit_inode_child(const char *dname, const struct inode *inode, |
| 330 | unsigned long pino); | 330 | const struct inode *parent); |
| 331 | extern void __audit_inode_update(const struct inode *inode); | ||
| 332 | static inline int audit_dummy_context(void) | ||
| 333 | { | ||
| 334 | void *p = current->audit_context; | ||
| 335 | return !p || *(int *)p; | ||
| 336 | } | ||
| 331 | static inline void audit_getname(const char *name) | 337 | static inline void audit_getname(const char *name) |
| 332 | { | 338 | { |
| 333 | if (unlikely(current->audit_context)) | 339 | if (unlikely(!audit_dummy_context())) |
| 334 | __audit_getname(name); | 340 | __audit_getname(name); |
| 335 | } | 341 | } |
| 336 | static inline void audit_inode(const char *name, const struct inode *inode) { | 342 | static inline void audit_inode(const char *name, const struct inode *inode) { |
| 337 | if (unlikely(current->audit_context)) | 343 | if (unlikely(!audit_dummy_context())) |
| 338 | __audit_inode(name, inode); | 344 | __audit_inode(name, inode); |
| 339 | } | 345 | } |
| 340 | static inline void audit_inode_child(const char *dname, | 346 | static inline void audit_inode_child(const char *dname, |
| 341 | const struct inode *inode, | 347 | const struct inode *inode, |
| 342 | unsigned long pino) { | 348 | const struct inode *parent) { |
| 343 | if (unlikely(current->audit_context)) | 349 | if (unlikely(!audit_dummy_context())) |
| 344 | __audit_inode_child(dname, inode, pino); | 350 | __audit_inode_child(dname, inode, parent); |
| 351 | } | ||
| 352 | static inline void audit_inode_update(const struct inode *inode) { | ||
| 353 | if (unlikely(!audit_dummy_context())) | ||
| 354 | __audit_inode_update(inode); | ||
| 345 | } | 355 | } |
| 346 | 356 | ||
| 347 | /* Private API (for audit.c only) */ | 357 | /* Private API (for audit.c only) */ |
| @@ -365,57 +375,61 @@ extern int __audit_mq_getsetattr(mqd_t mqdes, struct mq_attr *mqstat); | |||
| 365 | 375 | ||
| 366 | static inline int audit_ipc_obj(struct kern_ipc_perm *ipcp) | 376 | static inline int audit_ipc_obj(struct kern_ipc_perm *ipcp) |
| 367 | { | 377 | { |
| 368 | if (unlikely(current->audit_context)) | 378 | if (unlikely(!audit_dummy_context())) |
| 369 | return __audit_ipc_obj(ipcp); | 379 | return __audit_ipc_obj(ipcp); |
| 370 | return 0; | 380 | return 0; |
| 371 | } | 381 | } |
| 372 | static inline int audit_ipc_set_perm(unsigned long qbytes, uid_t uid, gid_t gid, mode_t mode) | 382 | static inline int audit_ipc_set_perm(unsigned long qbytes, uid_t uid, gid_t gid, mode_t mode) |
| 373 | { | 383 | { |
| 374 | if (unlikely(current->audit_context)) | 384 | if (unlikely(!audit_dummy_context())) |
| 375 | return __audit_ipc_set_perm(qbytes, uid, gid, mode); | 385 | return __audit_ipc_set_perm(qbytes, uid, gid, mode); |
| 376 | return 0; | 386 | return 0; |
| 377 | } | 387 | } |
| 378 | static inline int audit_mq_open(int oflag, mode_t mode, struct mq_attr __user *u_attr) | 388 | static inline int audit_mq_open(int oflag, mode_t mode, struct mq_attr __user *u_attr) |
| 379 | { | 389 | { |
| 380 | if (unlikely(current->audit_context)) | 390 | if (unlikely(!audit_dummy_context())) |
| 381 | return __audit_mq_open(oflag, mode, u_attr); | 391 | return __audit_mq_open(oflag, mode, u_attr); |
| 382 | return 0; | 392 | return 0; |
| 383 | } | 393 | } |
| 384 | static inline int audit_mq_timedsend(mqd_t mqdes, size_t msg_len, unsigned int msg_prio, const struct timespec __user *u_abs_timeout) | 394 | static inline int audit_mq_timedsend(mqd_t mqdes, size_t msg_len, unsigned int msg_prio, const struct timespec __user *u_abs_timeout) |
| 385 | { | 395 | { |
| 386 | if (unlikely(current->audit_context)) | 396 | if (unlikely(!audit_dummy_context())) |
| 387 | return __audit_mq_timedsend(mqdes, msg_len, msg_prio, u_abs_timeout); | 397 | return __audit_mq_timedsend(mqdes, msg_len, msg_prio, u_abs_timeout); |
| 388 | return 0; | 398 | return 0; |
| 389 | } | 399 | } |
| 390 | static inline int audit_mq_timedreceive(mqd_t mqdes, size_t msg_len, unsigned int __user *u_msg_prio, const struct timespec __user *u_abs_timeout) | 400 | static inline int audit_mq_timedreceive(mqd_t mqdes, size_t msg_len, unsigned int __user *u_msg_prio, const struct timespec __user *u_abs_timeout) |
| 391 | { | 401 | { |
| 392 | if (unlikely(current->audit_context)) | 402 | if (unlikely(!audit_dummy_context())) |
| 393 | return __audit_mq_timedreceive(mqdes, msg_len, u_msg_prio, u_abs_timeout); | 403 | return __audit_mq_timedreceive(mqdes, msg_len, u_msg_prio, u_abs_timeout); |
| 394 | return 0; | 404 | return 0; |
| 395 | } | 405 | } |
| 396 | static inline int audit_mq_notify(mqd_t mqdes, const struct sigevent __user *u_notification) | 406 | static inline int audit_mq_notify(mqd_t mqdes, const struct sigevent __user *u_notification) |
| 397 | { | 407 | { |
| 398 | if (unlikely(current->audit_context)) | 408 | if (unlikely(!audit_dummy_context())) |
| 399 | return __audit_mq_notify(mqdes, u_notification); | 409 | return __audit_mq_notify(mqdes, u_notification); |
| 400 | return 0; | 410 | return 0; |
| 401 | } | 411 | } |
| 402 | static inline int audit_mq_getsetattr(mqd_t mqdes, struct mq_attr *mqstat) | 412 | static inline int audit_mq_getsetattr(mqd_t mqdes, struct mq_attr *mqstat) |
| 403 | { | 413 | { |
| 404 | if (unlikely(current->audit_context)) | 414 | if (unlikely(!audit_dummy_context())) |
| 405 | return __audit_mq_getsetattr(mqdes, mqstat); | 415 | return __audit_mq_getsetattr(mqdes, mqstat); |
| 406 | return 0; | 416 | return 0; |
| 407 | } | 417 | } |
| 418 | extern int audit_n_rules; | ||
| 408 | #else | 419 | #else |
| 409 | #define audit_alloc(t) ({ 0; }) | 420 | #define audit_alloc(t) ({ 0; }) |
| 410 | #define audit_free(t) do { ; } while (0) | 421 | #define audit_free(t) do { ; } while (0) |
| 411 | #define audit_syscall_entry(ta,a,b,c,d,e) do { ; } while (0) | 422 | #define audit_syscall_entry(ta,a,b,c,d,e) do { ; } while (0) |
| 412 | #define audit_syscall_exit(f,r) do { ; } while (0) | 423 | #define audit_syscall_exit(f,r) do { ; } while (0) |
| 424 | #define audit_dummy_context() 1 | ||
| 413 | #define audit_getname(n) do { ; } while (0) | 425 | #define audit_getname(n) do { ; } while (0) |
| 414 | #define audit_putname(n) do { ; } while (0) | 426 | #define audit_putname(n) do { ; } while (0) |
| 415 | #define __audit_inode(n,i) do { ; } while (0) | 427 | #define __audit_inode(n,i) do { ; } while (0) |
| 416 | #define __audit_inode_child(d,i,p) do { ; } while (0) | 428 | #define __audit_inode_child(d,i,p) do { ; } while (0) |
| 429 | #define __audit_inode_update(i) do { ; } while (0) | ||
| 417 | #define audit_inode(n,i) do { ; } while (0) | 430 | #define audit_inode(n,i) do { ; } while (0) |
| 418 | #define audit_inode_child(d,i,p) do { ; } while (0) | 431 | #define audit_inode_child(d,i,p) do { ; } while (0) |
| 432 | #define audit_inode_update(i) do { ; } while (0) | ||
| 419 | #define auditsc_get_stamp(c,t,s) do { BUG(); } while (0) | 433 | #define auditsc_get_stamp(c,t,s) do { BUG(); } while (0) |
| 420 | #define audit_get_loginuid(c) ({ -1; }) | 434 | #define audit_get_loginuid(c) ({ -1; }) |
| 421 | #define audit_ipc_obj(i) ({ 0; }) | 435 | #define audit_ipc_obj(i) ({ 0; }) |
| @@ -430,6 +444,7 @@ static inline int audit_mq_getsetattr(mqd_t mqdes, struct mq_attr *mqstat) | |||
| 430 | #define audit_mq_timedreceive(d,l,p,t) ({ 0; }) | 444 | #define audit_mq_timedreceive(d,l,p,t) ({ 0; }) |
| 431 | #define audit_mq_notify(d,n) ({ 0; }) | 445 | #define audit_mq_notify(d,n) ({ 0; }) |
| 432 | #define audit_mq_getsetattr(d,s) ({ 0; }) | 446 | #define audit_mq_getsetattr(d,s) ({ 0; }) |
| 447 | #define audit_n_rules 0 | ||
| 433 | #endif | 448 | #endif |
| 434 | 449 | ||
| 435 | #ifdef CONFIG_AUDIT | 450 | #ifdef CONFIG_AUDIT |
diff --git a/include/linux/fsnotify.h b/include/linux/fsnotify.h index cc5dec70c32c..d4f219ffaa5d 100644 --- a/include/linux/fsnotify.h +++ b/include/linux/fsnotify.h | |||
| @@ -67,7 +67,7 @@ static inline void fsnotify_move(struct inode *old_dir, struct inode *new_dir, | |||
| 67 | if (source) { | 67 | if (source) { |
| 68 | inotify_inode_queue_event(source, IN_MOVE_SELF, 0, NULL, NULL); | 68 | inotify_inode_queue_event(source, IN_MOVE_SELF, 0, NULL, NULL); |
| 69 | } | 69 | } |
| 70 | audit_inode_child(new_name, source, new_dir->i_ino); | 70 | audit_inode_child(new_name, source, new_dir); |
| 71 | } | 71 | } |
| 72 | 72 | ||
| 73 | /* | 73 | /* |
| @@ -98,7 +98,7 @@ static inline void fsnotify_create(struct inode *inode, struct dentry *dentry) | |||
| 98 | inode_dir_notify(inode, DN_CREATE); | 98 | inode_dir_notify(inode, DN_CREATE); |
| 99 | inotify_inode_queue_event(inode, IN_CREATE, 0, dentry->d_name.name, | 99 | inotify_inode_queue_event(inode, IN_CREATE, 0, dentry->d_name.name, |
| 100 | dentry->d_inode); | 100 | dentry->d_inode); |
| 101 | audit_inode_child(dentry->d_name.name, dentry->d_inode, inode->i_ino); | 101 | audit_inode_child(dentry->d_name.name, dentry->d_inode, inode); |
| 102 | } | 102 | } |
| 103 | 103 | ||
| 104 | /* | 104 | /* |
| @@ -109,7 +109,7 @@ static inline void fsnotify_mkdir(struct inode *inode, struct dentry *dentry) | |||
| 109 | inode_dir_notify(inode, DN_CREATE); | 109 | inode_dir_notify(inode, DN_CREATE); |
| 110 | inotify_inode_queue_event(inode, IN_CREATE | IN_ISDIR, 0, | 110 | inotify_inode_queue_event(inode, IN_CREATE | IN_ISDIR, 0, |
| 111 | dentry->d_name.name, dentry->d_inode); | 111 | dentry->d_name.name, dentry->d_inode); |
| 112 | audit_inode_child(dentry->d_name.name, dentry->d_inode, inode->i_ino); | 112 | audit_inode_child(dentry->d_name.name, dentry->d_inode, inode); |
| 113 | } | 113 | } |
| 114 | 114 | ||
| 115 | /* | 115 | /* |
diff --git a/include/linux/kobject.h b/include/linux/kobject.h index 0503b2ed8bae..2d229327959e 100644 --- a/include/linux/kobject.h +++ b/include/linux/kobject.h | |||
| @@ -46,8 +46,6 @@ enum kobject_action { | |||
| 46 | KOBJ_UMOUNT = (__force kobject_action_t) 0x05, /* umount event for block devices (broken) */ | 46 | KOBJ_UMOUNT = (__force kobject_action_t) 0x05, /* umount event for block devices (broken) */ |
| 47 | KOBJ_OFFLINE = (__force kobject_action_t) 0x06, /* device offline */ | 47 | KOBJ_OFFLINE = (__force kobject_action_t) 0x06, /* device offline */ |
| 48 | KOBJ_ONLINE = (__force kobject_action_t) 0x07, /* device online */ | 48 | KOBJ_ONLINE = (__force kobject_action_t) 0x07, /* device online */ |
| 49 | KOBJ_UNDOCK = (__force kobject_action_t) 0x08, /* undocking */ | ||
| 50 | KOBJ_DOCK = (__force kobject_action_t) 0x09, /* dock */ | ||
| 51 | }; | 49 | }; |
| 52 | 50 | ||
| 53 | struct kobject { | 51 | struct kobject { |
diff --git a/include/linux/netfilter_bridge.h b/include/linux/netfilter_bridge.h index 31f02ba036ce..10c13dc4665b 100644 --- a/include/linux/netfilter_bridge.h +++ b/include/linux/netfilter_bridge.h | |||
| @@ -6,7 +6,6 @@ | |||
| 6 | 6 | ||
| 7 | #include <linux/netfilter.h> | 7 | #include <linux/netfilter.h> |
| 8 | #if defined(__KERNEL__) && defined(CONFIG_BRIDGE_NETFILTER) | 8 | #if defined(__KERNEL__) && defined(CONFIG_BRIDGE_NETFILTER) |
| 9 | #include <asm/atomic.h> | ||
| 10 | #include <linux/if_ether.h> | 9 | #include <linux/if_ether.h> |
| 11 | #endif | 10 | #endif |
| 12 | 11 | ||
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h index c09396d2c77b..4eae06b08cf2 100644 --- a/include/linux/pci_ids.h +++ b/include/linux/pci_ids.h | |||
| @@ -2142,6 +2142,7 @@ | |||
| 2142 | #define PCI_DEVICE_ID_INTEL_82820_UP_HB 0x2501 | 2142 | #define PCI_DEVICE_ID_INTEL_82820_UP_HB 0x2501 |
| 2143 | #define PCI_DEVICE_ID_INTEL_82850_HB 0x2530 | 2143 | #define PCI_DEVICE_ID_INTEL_82850_HB 0x2530 |
| 2144 | #define PCI_DEVICE_ID_INTEL_82860_HB 0x2531 | 2144 | #define PCI_DEVICE_ID_INTEL_82860_HB 0x2531 |
| 2145 | #define PCI_DEVICE_ID_INTEL_E7501_MCH 0x254c | ||
| 2145 | #define PCI_DEVICE_ID_INTEL_82845G_HB 0x2560 | 2146 | #define PCI_DEVICE_ID_INTEL_82845G_HB 0x2560 |
| 2146 | #define PCI_DEVICE_ID_INTEL_82845G_IG 0x2562 | 2147 | #define PCI_DEVICE_ID_INTEL_82845G_IG 0x2562 |
| 2147 | #define PCI_DEVICE_ID_INTEL_82865_HB 0x2570 | 2148 | #define PCI_DEVICE_ID_INTEL_82865_HB 0x2570 |
diff --git a/include/linux/security.h b/include/linux/security.h index f75303831d09..6bc2aad494ff 100644 --- a/include/linux/security.h +++ b/include/linux/security.h | |||
| @@ -1109,6 +1109,16 @@ struct swap_info_struct; | |||
| 1109 | * @name contains the name of the security module being unstacked. | 1109 | * @name contains the name of the security module being unstacked. |
| 1110 | * @ops contains a pointer to the struct security_operations of the module to unstack. | 1110 | * @ops contains a pointer to the struct security_operations of the module to unstack. |
| 1111 | * | 1111 | * |
| 1112 | * @secid_to_secctx: | ||
| 1113 | * Convert secid to security context. | ||
| 1114 | * @secid contains the security ID. | ||
| 1115 | * @secdata contains the pointer that stores the converted security context. | ||
| 1116 | * | ||
| 1117 | * @release_secctx: | ||
| 1118 | * Release the security context. | ||
| 1119 | * @secdata contains the security context. | ||
| 1120 | * @seclen contains the length of the security context. | ||
| 1121 | * | ||
| 1112 | * This is the main security structure. | 1122 | * This is the main security structure. |
| 1113 | */ | 1123 | */ |
| 1114 | struct security_operations { | 1124 | struct security_operations { |
| @@ -1289,6 +1299,8 @@ struct security_operations { | |||
| 1289 | 1299 | ||
| 1290 | int (*getprocattr)(struct task_struct *p, char *name, void *value, size_t size); | 1300 | int (*getprocattr)(struct task_struct *p, char *name, void *value, size_t size); |
| 1291 | int (*setprocattr)(struct task_struct *p, char *name, void *value, size_t size); | 1301 | int (*setprocattr)(struct task_struct *p, char *name, void *value, size_t size); |
| 1302 | int (*secid_to_secctx)(u32 secid, char **secdata, u32 *seclen); | ||
| 1303 | void (*release_secctx)(char *secdata, u32 seclen); | ||
| 1292 | 1304 | ||
| 1293 | #ifdef CONFIG_SECURITY_NETWORK | 1305 | #ifdef CONFIG_SECURITY_NETWORK |
| 1294 | int (*unix_stream_connect) (struct socket * sock, | 1306 | int (*unix_stream_connect) (struct socket * sock, |
| @@ -1317,7 +1329,7 @@ struct security_operations { | |||
| 1317 | int (*socket_shutdown) (struct socket * sock, int how); | 1329 | int (*socket_shutdown) (struct socket * sock, int how); |
| 1318 | int (*socket_sock_rcv_skb) (struct sock * sk, struct sk_buff * skb); | 1330 | int (*socket_sock_rcv_skb) (struct sock * sk, struct sk_buff * skb); |
| 1319 | int (*socket_getpeersec_stream) (struct socket *sock, char __user *optval, int __user *optlen, unsigned len); | 1331 | int (*socket_getpeersec_stream) (struct socket *sock, char __user *optval, int __user *optlen, unsigned len); |
| 1320 | int (*socket_getpeersec_dgram) (struct sk_buff *skb, char **secdata, u32 *seclen); | 1332 | int (*socket_getpeersec_dgram) (struct socket *sock, struct sk_buff *skb, u32 *secid); |
| 1321 | int (*sk_alloc_security) (struct sock *sk, int family, gfp_t priority); | 1333 | int (*sk_alloc_security) (struct sock *sk, int family, gfp_t priority); |
| 1322 | void (*sk_free_security) (struct sock *sk); | 1334 | void (*sk_free_security) (struct sock *sk); |
| 1323 | unsigned int (*sk_getsid) (struct sock *sk, struct flowi *fl, u8 dir); | 1335 | unsigned int (*sk_getsid) (struct sock *sk, struct flowi *fl, u8 dir); |
| @@ -2059,6 +2071,16 @@ static inline int security_netlink_recv(struct sk_buff * skb, int cap) | |||
| 2059 | return security_ops->netlink_recv(skb, cap); | 2071 | return security_ops->netlink_recv(skb, cap); |
| 2060 | } | 2072 | } |
| 2061 | 2073 | ||
| 2074 | static inline int security_secid_to_secctx(u32 secid, char **secdata, u32 *seclen) | ||
| 2075 | { | ||
| 2076 | return security_ops->secid_to_secctx(secid, secdata, seclen); | ||
| 2077 | } | ||
| 2078 | |||
| 2079 | static inline void security_release_secctx(char *secdata, u32 seclen) | ||
| 2080 | { | ||
| 2081 | return security_ops->release_secctx(secdata, seclen); | ||
| 2082 | } | ||
| 2083 | |||
| 2062 | /* prototypes */ | 2084 | /* prototypes */ |
| 2063 | extern int security_init (void); | 2085 | extern int security_init (void); |
| 2064 | extern int register_security (struct security_operations *ops); | 2086 | extern int register_security (struct security_operations *ops); |
| @@ -2725,6 +2747,14 @@ static inline void securityfs_remove(struct dentry *dentry) | |||
| 2725 | { | 2747 | { |
| 2726 | } | 2748 | } |
| 2727 | 2749 | ||
| 2750 | static inline int security_secid_to_secctx(u32 secid, char **secdata, u32 *seclen) | ||
| 2751 | { | ||
| 2752 | return -EOPNOTSUPP; | ||
| 2753 | } | ||
| 2754 | |||
| 2755 | static inline void security_release_secctx(char *secdata, u32 seclen) | ||
| 2756 | { | ||
| 2757 | } | ||
| 2728 | #endif /* CONFIG_SECURITY */ | 2758 | #endif /* CONFIG_SECURITY */ |
| 2729 | 2759 | ||
| 2730 | #ifdef CONFIG_SECURITY_NETWORK | 2760 | #ifdef CONFIG_SECURITY_NETWORK |
| @@ -2840,10 +2870,9 @@ static inline int security_socket_getpeersec_stream(struct socket *sock, char __ | |||
| 2840 | return security_ops->socket_getpeersec_stream(sock, optval, optlen, len); | 2870 | return security_ops->socket_getpeersec_stream(sock, optval, optlen, len); |
| 2841 | } | 2871 | } |
| 2842 | 2872 | ||
| 2843 | static inline int security_socket_getpeersec_dgram(struct sk_buff *skb, char **secdata, | 2873 | static inline int security_socket_getpeersec_dgram(struct socket *sock, struct sk_buff *skb, u32 *secid) |
| 2844 | u32 *seclen) | ||
| 2845 | { | 2874 | { |
| 2846 | return security_ops->socket_getpeersec_dgram(skb, secdata, seclen); | 2875 | return security_ops->socket_getpeersec_dgram(sock, skb, secid); |
| 2847 | } | 2876 | } |
| 2848 | 2877 | ||
| 2849 | static inline int security_sk_alloc(struct sock *sk, int family, gfp_t priority) | 2878 | static inline int security_sk_alloc(struct sock *sk, int family, gfp_t priority) |
| @@ -2968,8 +2997,7 @@ static inline int security_socket_getpeersec_stream(struct socket *sock, char __ | |||
| 2968 | return -ENOPROTOOPT; | 2997 | return -ENOPROTOOPT; |
| 2969 | } | 2998 | } |
| 2970 | 2999 | ||
| 2971 | static inline int security_socket_getpeersec_dgram(struct sk_buff *skb, char **secdata, | 3000 | static inline int security_socket_getpeersec_dgram(struct socket *sock, struct sk_buff *skb, u32 *secid) |
| 2972 | u32 *seclen) | ||
| 2973 | { | 3001 | { |
| 2974 | return -ENOPROTOOPT; | 3002 | return -ENOPROTOOPT; |
| 2975 | } | 3003 | } |
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index 4307e764ef0a..19c96d498e20 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h | |||
| @@ -604,12 +604,17 @@ static inline __u32 skb_queue_len(const struct sk_buff_head *list_) | |||
| 604 | return list_->qlen; | 604 | return list_->qlen; |
| 605 | } | 605 | } |
| 606 | 606 | ||
| 607 | extern struct lock_class_key skb_queue_lock_key; | 607 | /* |
| 608 | 608 | * This function creates a split out lock class for each invocation; | |
| 609 | * this is needed for now since a whole lot of users of the skb-queue | ||
| 610 | * infrastructure in drivers have different locking usage (in hardirq) | ||
| 611 | * than the networking core (in softirq only). In the long run either the | ||
| 612 | * network layer or drivers should need annotation to consolidate the | ||
| 613 | * main types of usage into 3 classes. | ||
| 614 | */ | ||
| 609 | static inline void skb_queue_head_init(struct sk_buff_head *list) | 615 | static inline void skb_queue_head_init(struct sk_buff_head *list) |
| 610 | { | 616 | { |
| 611 | spin_lock_init(&list->lock); | 617 | spin_lock_init(&list->lock); |
| 612 | lockdep_set_class(&list->lock, &skb_queue_lock_key); | ||
| 613 | list->prev = list->next = (struct sk_buff *)list; | 618 | list->prev = list->next = (struct sk_buff *)list; |
| 614 | list->qlen = 0; | 619 | list->qlen = 0; |
| 615 | } | 620 | } |
| @@ -1104,6 +1109,28 @@ static inline struct sk_buff *dev_alloc_skb(unsigned int length) | |||
| 1104 | return __dev_alloc_skb(length, GFP_ATOMIC); | 1109 | return __dev_alloc_skb(length, GFP_ATOMIC); |
| 1105 | } | 1110 | } |
| 1106 | 1111 | ||
| 1112 | extern struct sk_buff *__netdev_alloc_skb(struct net_device *dev, | ||
| 1113 | unsigned int length, gfp_t gfp_mask); | ||
| 1114 | |||
| 1115 | /** | ||
| 1116 | * netdev_alloc_skb - allocate an skbuff for rx on a specific device | ||
| 1117 | * @dev: network device to receive on | ||
| 1118 | * @length: length to allocate | ||
| 1119 | * | ||
| 1120 | * Allocate a new &sk_buff and assign it a usage count of one. The | ||
| 1121 | * buffer has unspecified headroom built in. Users should allocate | ||
| 1122 | * the headroom they think they need without accounting for the | ||
| 1123 | * built in space. The built in space is used for optimisations. | ||
| 1124 | * | ||
| 1125 | * %NULL is returned if there is no free memory. Although this function | ||
| 1126 | * allocates memory it can be called from an interrupt. | ||
| 1127 | */ | ||
| 1128 | static inline struct sk_buff *netdev_alloc_skb(struct net_device *dev, | ||
| 1129 | unsigned int length) | ||
| 1130 | { | ||
| 1131 | return __netdev_alloc_skb(dev, length, GFP_ATOMIC); | ||
| 1132 | } | ||
| 1133 | |||
| 1107 | /** | 1134 | /** |
| 1108 | * skb_cow - copy header of skb when it is required | 1135 | * skb_cow - copy header of skb when it is required |
| 1109 | * @skb: buffer to cow | 1136 | * @skb: buffer to cow |
diff --git a/include/linux/usb.h b/include/linux/usb.h index c944e8f06a4a..d2bd0c8e0154 100644 --- a/include/linux/usb.h +++ b/include/linux/usb.h | |||
| @@ -103,8 +103,7 @@ enum usb_interface_condition { | |||
| 103 | * @condition: binding state of the interface: not bound, binding | 103 | * @condition: binding state of the interface: not bound, binding |
| 104 | * (in probe()), bound to a driver, or unbinding (in disconnect()) | 104 | * (in probe()), bound to a driver, or unbinding (in disconnect()) |
| 105 | * @dev: driver model's view of this device | 105 | * @dev: driver model's view of this device |
| 106 | * @usb_dev: if an interface is bound to the USB major, this will point | 106 | * @class_dev: driver model's class view of this device. |
| 107 | * to the sysfs representation for that device. | ||
| 108 | * | 107 | * |
| 109 | * USB device drivers attach to interfaces on a physical device. Each | 108 | * USB device drivers attach to interfaces on a physical device. Each |
| 110 | * interface encapsulates a single high level function, such as feeding | 109 | * interface encapsulates a single high level function, such as feeding |
| @@ -144,7 +143,7 @@ struct usb_interface { | |||
| 144 | * bound to */ | 143 | * bound to */ |
| 145 | enum usb_interface_condition condition; /* state of binding */ | 144 | enum usb_interface_condition condition; /* state of binding */ |
| 146 | struct device dev; /* interface specific device info */ | 145 | struct device dev; /* interface specific device info */ |
| 147 | struct device *usb_dev; /* pointer to the usb class's device, if any */ | 146 | struct class_device *class_dev; |
| 148 | }; | 147 | }; |
| 149 | #define to_usb_interface(d) container_of(d, struct usb_interface, dev) | 148 | #define to_usb_interface(d) container_of(d, struct usb_interface, dev) |
| 150 | #define interface_to_usbdev(intf) \ | 149 | #define interface_to_usbdev(intf) \ |
| @@ -361,7 +360,7 @@ struct usb_device { | |||
| 361 | char *serial; /* iSerialNumber string, if present */ | 360 | char *serial; /* iSerialNumber string, if present */ |
| 362 | 361 | ||
| 363 | struct list_head filelist; | 362 | struct list_head filelist; |
| 364 | struct device *usbfs_dev; | 363 | struct class_device *class_dev; |
| 365 | struct dentry *usbfs_dentry; /* usbfs dentry entry for the device */ | 364 | struct dentry *usbfs_dentry; /* usbfs dentry entry for the device */ |
| 366 | 365 | ||
| 367 | /* | 366 | /* |
diff --git a/include/linux/usb_usual.h b/include/linux/usb_usual.h index f38f43f20fae..e7fc5fed5b98 100644 --- a/include/linux/usb_usual.h +++ b/include/linux/usb_usual.h | |||
| @@ -44,7 +44,9 @@ | |||
| 44 | US_FLAG(NO_WP_DETECT, 0x00000200) \ | 44 | US_FLAG(NO_WP_DETECT, 0x00000200) \ |
| 45 | /* Don't check for write-protect */ \ | 45 | /* Don't check for write-protect */ \ |
| 46 | US_FLAG(MAX_SECTORS_64, 0x00000400) \ | 46 | US_FLAG(MAX_SECTORS_64, 0x00000400) \ |
| 47 | /* Sets max_sectors to 64 */ | 47 | /* Sets max_sectors to 64 */ \ |
| 48 | US_FLAG(IGNORE_DEVICE, 0x00000800) \ | ||
| 49 | /* Don't claim device */ | ||
| 48 | 50 | ||
| 49 | #define US_FLAG(name, value) US_FL_##name = value , | 51 | #define US_FLAG(name, value) US_FL_##name = value , |
| 50 | enum { US_DO_ALL_FLAGS }; | 52 | enum { US_DO_ALL_FLAGS }; |
diff --git a/include/linux/videodev.h b/include/linux/videodev.h index 41bc7e9603cd..518c7a32175e 100644 --- a/include/linux/videodev.h +++ b/include/linux/videodev.h | |||
| @@ -12,10 +12,11 @@ | |||
| 12 | #ifndef __LINUX_VIDEODEV_H | 12 | #ifndef __LINUX_VIDEODEV_H |
| 13 | #define __LINUX_VIDEODEV_H | 13 | #define __LINUX_VIDEODEV_H |
| 14 | 14 | ||
| 15 | #define HAVE_V4L1 1 | ||
| 16 | |||
| 17 | #include <linux/videodev2.h> | 15 | #include <linux/videodev2.h> |
| 18 | 16 | ||
| 17 | #ifdef CONFIG_VIDEO_V4L1_COMPAT | ||
| 18 | #define HAVE_V4L1 1 | ||
| 19 | |||
| 19 | struct video_capability | 20 | struct video_capability |
| 20 | { | 21 | { |
| 21 | char name[32]; | 22 | char name[32]; |
| @@ -336,6 +337,8 @@ struct video_code | |||
| 336 | #define VID_HARDWARE_SN9C102 38 | 337 | #define VID_HARDWARE_SN9C102 38 |
| 337 | #define VID_HARDWARE_ARV 39 | 338 | #define VID_HARDWARE_ARV 39 |
| 338 | 339 | ||
| 340 | #endif /* CONFIG_VIDEO_V4L1_COMPAT */ | ||
| 341 | |||
| 339 | #endif /* __LINUX_VIDEODEV_H */ | 342 | #endif /* __LINUX_VIDEODEV_H */ |
| 340 | 343 | ||
| 341 | /* | 344 | /* |
diff --git a/include/linux/videodev2.h b/include/linux/videodev2.h index a62673dad76e..b7146956a929 100644 --- a/include/linux/videodev2.h +++ b/include/linux/videodev2.h | |||
| @@ -716,7 +716,7 @@ struct v4l2_ext_control | |||
| 716 | __s64 value64; | 716 | __s64 value64; |
| 717 | void *reserved; | 717 | void *reserved; |
| 718 | }; | 718 | }; |
| 719 | }; | 719 | } __attribute__ ((packed)); |
| 720 | 720 | ||
| 721 | struct v4l2_ext_controls | 721 | struct v4l2_ext_controls |
| 722 | { | 722 | { |
diff --git a/include/media/v4l2-dev.h b/include/media/v4l2-dev.h index 62dae1a8c441..f8665326ed9f 100644 --- a/include/media/v4l2-dev.h +++ b/include/media/v4l2-dev.h | |||
| @@ -341,11 +341,14 @@ extern int video_usercopy(struct inode *inode, struct file *file, | |||
| 341 | extern struct video_device* video_devdata(struct file*); | 341 | extern struct video_device* video_devdata(struct file*); |
| 342 | 342 | ||
| 343 | #define to_video_device(cd) container_of(cd, struct video_device, class_dev) | 343 | #define to_video_device(cd) container_of(cd, struct video_device, class_dev) |
| 344 | static inline void | 344 | static inline int |
| 345 | video_device_create_file(struct video_device *vfd, | 345 | video_device_create_file(struct video_device *vfd, |
| 346 | struct class_device_attribute *attr) | 346 | struct class_device_attribute *attr) |
| 347 | { | 347 | { |
| 348 | class_device_create_file(&vfd->class_dev, attr); | 348 | int ret = class_device_create_file(&vfd->class_dev, attr); |
| 349 | if (ret < 0) | ||
| 350 | printk(KERN_WARNING "%s error: %d\n", __FUNCTION__, ret); | ||
| 351 | return ret; | ||
| 349 | } | 352 | } |
| 350 | static inline void | 353 | static inline void |
| 351 | video_device_remove_file(struct video_device *vfd, | 354 | video_device_remove_file(struct video_device *vfd, |
diff --git a/include/net/af_unix.h b/include/net/af_unix.h index 2fec827c8801..c0398f5a8cb9 100644 --- a/include/net/af_unix.h +++ b/include/net/af_unix.h | |||
| @@ -54,15 +54,13 @@ struct unix_skb_parms { | |||
| 54 | struct ucred creds; /* Skb credentials */ | 54 | struct ucred creds; /* Skb credentials */ |
| 55 | struct scm_fp_list *fp; /* Passed files */ | 55 | struct scm_fp_list *fp; /* Passed files */ |
| 56 | #ifdef CONFIG_SECURITY_NETWORK | 56 | #ifdef CONFIG_SECURITY_NETWORK |
| 57 | char *secdata; /* Security context */ | 57 | u32 secid; /* Security ID */ |
| 58 | u32 seclen; /* Security length */ | ||
| 59 | #endif | 58 | #endif |
| 60 | }; | 59 | }; |
| 61 | 60 | ||
| 62 | #define UNIXCB(skb) (*(struct unix_skb_parms*)&((skb)->cb)) | 61 | #define UNIXCB(skb) (*(struct unix_skb_parms*)&((skb)->cb)) |
| 63 | #define UNIXCREDS(skb) (&UNIXCB((skb)).creds) | 62 | #define UNIXCREDS(skb) (&UNIXCB((skb)).creds) |
| 64 | #define UNIXSECDATA(skb) (&UNIXCB((skb)).secdata) | 63 | #define UNIXSID(skb) (&UNIXCB((skb)).secid) |
| 65 | #define UNIXSECLEN(skb) (&UNIXCB((skb)).seclen) | ||
| 66 | 64 | ||
| 67 | #define unix_state_rlock(s) spin_lock(&unix_sk(s)->lock) | 65 | #define unix_state_rlock(s) spin_lock(&unix_sk(s)->lock) |
| 68 | #define unix_state_runlock(s) spin_unlock(&unix_sk(s)->lock) | 66 | #define unix_state_runlock(s) spin_unlock(&unix_sk(s)->lock) |
diff --git a/include/net/ip6_route.h b/include/net/ip6_route.h index ab29dafb1a6a..96b0e66406ec 100644 --- a/include/net/ip6_route.h +++ b/include/net/ip6_route.h | |||
| @@ -139,16 +139,22 @@ extern rwlock_t rt6_lock; | |||
| 139 | /* | 139 | /* |
| 140 | * Store a destination cache entry in a socket | 140 | * Store a destination cache entry in a socket |
| 141 | */ | 141 | */ |
| 142 | static inline void ip6_dst_store(struct sock *sk, struct dst_entry *dst, | 142 | static inline void __ip6_dst_store(struct sock *sk, struct dst_entry *dst, |
| 143 | struct in6_addr *daddr) | 143 | struct in6_addr *daddr) |
| 144 | { | 144 | { |
| 145 | struct ipv6_pinfo *np = inet6_sk(sk); | 145 | struct ipv6_pinfo *np = inet6_sk(sk); |
| 146 | struct rt6_info *rt = (struct rt6_info *) dst; | 146 | struct rt6_info *rt = (struct rt6_info *) dst; |
| 147 | 147 | ||
| 148 | write_lock(&sk->sk_dst_lock); | ||
| 149 | sk_setup_caps(sk, dst); | 148 | sk_setup_caps(sk, dst); |
| 150 | np->daddr_cache = daddr; | 149 | np->daddr_cache = daddr; |
| 151 | np->dst_cookie = rt->rt6i_node ? rt->rt6i_node->fn_sernum : 0; | 150 | np->dst_cookie = rt->rt6i_node ? rt->rt6i_node->fn_sernum : 0; |
| 151 | } | ||
| 152 | |||
| 153 | static inline void ip6_dst_store(struct sock *sk, struct dst_entry *dst, | ||
| 154 | struct in6_addr *daddr) | ||
| 155 | { | ||
| 156 | write_lock(&sk->sk_dst_lock); | ||
| 157 | __ip6_dst_store(sk, dst, daddr); | ||
| 152 | write_unlock(&sk->sk_dst_lock); | 158 | write_unlock(&sk->sk_dst_lock); |
| 153 | } | 159 | } |
| 154 | 160 | ||
diff --git a/include/net/ipv6.h b/include/net/ipv6.h index a8fdf7970b37..ece7e8a84ffd 100644 --- a/include/net/ipv6.h +++ b/include/net/ipv6.h | |||
| @@ -468,6 +468,9 @@ extern void ip6_flush_pending_frames(struct sock *sk); | |||
| 468 | extern int ip6_dst_lookup(struct sock *sk, | 468 | extern int ip6_dst_lookup(struct sock *sk, |
| 469 | struct dst_entry **dst, | 469 | struct dst_entry **dst, |
| 470 | struct flowi *fl); | 470 | struct flowi *fl); |
| 471 | extern int ip6_sk_dst_lookup(struct sock *sk, | ||
| 472 | struct dst_entry **dst, | ||
| 473 | struct flowi *fl); | ||
| 471 | 474 | ||
| 472 | /* | 475 | /* |
| 473 | * skb processing functions | 476 | * skb processing functions |
diff --git a/include/net/netdma.h b/include/net/netdma.h index ceae5ee85c04..7f53cd1d8b1e 100644 --- a/include/net/netdma.h +++ b/include/net/netdma.h | |||
| @@ -29,7 +29,7 @@ static inline struct dma_chan *get_softnet_dma(void) | |||
| 29 | { | 29 | { |
| 30 | struct dma_chan *chan; | 30 | struct dma_chan *chan; |
| 31 | rcu_read_lock(); | 31 | rcu_read_lock(); |
| 32 | chan = rcu_dereference(__get_cpu_var(softnet_data.net_dma)); | 32 | chan = rcu_dereference(__get_cpu_var(softnet_data).net_dma); |
| 33 | if (chan) | 33 | if (chan) |
| 34 | dma_chan_get(chan); | 34 | dma_chan_get(chan); |
| 35 | rcu_read_unlock(); | 35 | rcu_read_unlock(); |
diff --git a/include/net/netevent.h b/include/net/netevent.h new file mode 100644 index 000000000000..e5d216241423 --- /dev/null +++ b/include/net/netevent.h | |||
| @@ -0,0 +1,33 @@ | |||
| 1 | #ifndef _NET_EVENT_H | ||
| 2 | #define _NET_EVENT_H | ||
| 3 | |||
| 4 | /* | ||
| 5 | * Generic netevent notifiers | ||
| 6 | * | ||
| 7 | * Authors: | ||
| 8 | * Tom Tucker <tom@opengridcomputing.com> | ||
| 9 | * Steve Wise <swise@opengridcomputing.com> | ||
| 10 | * | ||
| 11 | * Changes: | ||
| 12 | */ | ||
| 13 | #ifdef __KERNEL__ | ||
| 14 | |||
| 15 | #include <net/dst.h> | ||
| 16 | |||
| 17 | struct netevent_redirect { | ||
| 18 | struct dst_entry *old; | ||
| 19 | struct dst_entry *new; | ||
| 20 | }; | ||
| 21 | |||
| 22 | enum netevent_notif_type { | ||
| 23 | NETEVENT_NEIGH_UPDATE = 1, /* arg is struct neighbour ptr */ | ||
| 24 | NETEVENT_PMTU_UPDATE, /* arg is struct dst_entry ptr */ | ||
| 25 | NETEVENT_REDIRECT, /* arg is struct netevent_redirect ptr */ | ||
| 26 | }; | ||
| 27 | |||
| 28 | extern int register_netevent_notifier(struct notifier_block *nb); | ||
| 29 | extern int unregister_netevent_notifier(struct notifier_block *nb); | ||
| 30 | extern int call_netevent_notifiers(unsigned long val, void *v); | ||
| 31 | |||
| 32 | #endif | ||
| 33 | #endif | ||
diff --git a/include/net/scm.h b/include/net/scm.h index 02daa097cdcd..5637d5e22d5f 100644 --- a/include/net/scm.h +++ b/include/net/scm.h | |||
| @@ -3,6 +3,7 @@ | |||
| 3 | 3 | ||
| 4 | #include <linux/limits.h> | 4 | #include <linux/limits.h> |
| 5 | #include <linux/net.h> | 5 | #include <linux/net.h> |
| 6 | #include <linux/security.h> | ||
| 6 | 7 | ||
| 7 | /* Well, we should have at least one descriptor open | 8 | /* Well, we should have at least one descriptor open |
| 8 | * to accept passed FDs 8) | 9 | * to accept passed FDs 8) |
| @@ -20,8 +21,7 @@ struct scm_cookie | |||
| 20 | struct ucred creds; /* Skb credentials */ | 21 | struct ucred creds; /* Skb credentials */ |
| 21 | struct scm_fp_list *fp; /* Passed files */ | 22 | struct scm_fp_list *fp; /* Passed files */ |
| 22 | #ifdef CONFIG_SECURITY_NETWORK | 23 | #ifdef CONFIG_SECURITY_NETWORK |
| 23 | char *secdata; /* Security context */ | 24 | u32 secid; /* Passed security ID */ |
| 24 | u32 seclen; /* Security length */ | ||
| 25 | #endif | 25 | #endif |
| 26 | unsigned long seq; /* Connection seqno */ | 26 | unsigned long seq; /* Connection seqno */ |
| 27 | }; | 27 | }; |
| @@ -32,6 +32,16 @@ extern int __scm_send(struct socket *sock, struct msghdr *msg, struct scm_cookie | |||
| 32 | extern void __scm_destroy(struct scm_cookie *scm); | 32 | extern void __scm_destroy(struct scm_cookie *scm); |
| 33 | extern struct scm_fp_list * scm_fp_dup(struct scm_fp_list *fpl); | 33 | extern struct scm_fp_list * scm_fp_dup(struct scm_fp_list *fpl); |
| 34 | 34 | ||
| 35 | #ifdef CONFIG_SECURITY_NETWORK | ||
| 36 | static __inline__ void unix_get_peersec_dgram(struct socket *sock, struct scm_cookie *scm) | ||
| 37 | { | ||
| 38 | security_socket_getpeersec_dgram(sock, NULL, &scm->secid); | ||
| 39 | } | ||
| 40 | #else | ||
| 41 | static __inline__ void unix_get_peersec_dgram(struct socket *sock, struct scm_cookie *scm) | ||
| 42 | { } | ||
| 43 | #endif /* CONFIG_SECURITY_NETWORK */ | ||
| 44 | |||
| 35 | static __inline__ void scm_destroy(struct scm_cookie *scm) | 45 | static __inline__ void scm_destroy(struct scm_cookie *scm) |
| 36 | { | 46 | { |
| 37 | if (scm && scm->fp) | 47 | if (scm && scm->fp) |
| @@ -47,6 +57,7 @@ static __inline__ int scm_send(struct socket *sock, struct msghdr *msg, | |||
| 47 | scm->creds.pid = p->tgid; | 57 | scm->creds.pid = p->tgid; |
| 48 | scm->fp = NULL; | 58 | scm->fp = NULL; |
| 49 | scm->seq = 0; | 59 | scm->seq = 0; |
| 60 | unix_get_peersec_dgram(sock, scm); | ||
| 50 | if (msg->msg_controllen <= 0) | 61 | if (msg->msg_controllen <= 0) |
| 51 | return 0; | 62 | return 0; |
| 52 | return __scm_send(sock, msg, scm); | 63 | return __scm_send(sock, msg, scm); |
| @@ -55,8 +66,18 @@ static __inline__ int scm_send(struct socket *sock, struct msghdr *msg, | |||
| 55 | #ifdef CONFIG_SECURITY_NETWORK | 66 | #ifdef CONFIG_SECURITY_NETWORK |
| 56 | static inline void scm_passec(struct socket *sock, struct msghdr *msg, struct scm_cookie *scm) | 67 | static inline void scm_passec(struct socket *sock, struct msghdr *msg, struct scm_cookie *scm) |
| 57 | { | 68 | { |
| 58 | if (test_bit(SOCK_PASSSEC, &sock->flags) && scm->secdata != NULL) | 69 | char *secdata; |
| 59 | put_cmsg(msg, SOL_SOCKET, SCM_SECURITY, scm->seclen, scm->secdata); | 70 | u32 seclen; |
| 71 | int err; | ||
| 72 | |||
| 73 | if (test_bit(SOCK_PASSSEC, &sock->flags)) { | ||
| 74 | err = security_secid_to_secctx(scm->secid, &secdata, &seclen); | ||
| 75 | |||
| 76 | if (!err) { | ||
| 77 | put_cmsg(msg, SOL_SOCKET, SCM_SECURITY, seclen, secdata); | ||
| 78 | security_release_secctx(secdata, seclen); | ||
| 79 | } | ||
| 80 | } | ||
| 60 | } | 81 | } |
| 61 | #else | 82 | #else |
| 62 | static inline void scm_passec(struct socket *sock, struct msghdr *msg, struct scm_cookie *scm) | 83 | static inline void scm_passec(struct socket *sock, struct msghdr *msg, struct scm_cookie *scm) |
diff --git a/include/net/tcp.h b/include/net/tcp.h index 0720bddff1e9..7a093d0aa0fe 100644 --- a/include/net/tcp.h +++ b/include/net/tcp.h | |||
| @@ -914,6 +914,9 @@ static inline void tcp_set_state(struct sock *sk, int state) | |||
| 914 | 914 | ||
| 915 | static inline void tcp_done(struct sock *sk) | 915 | static inline void tcp_done(struct sock *sk) |
| 916 | { | 916 | { |
| 917 | if(sk->sk_state == TCP_SYN_SENT || sk->sk_state == TCP_SYN_RECV) | ||
| 918 | TCP_INC_STATS_BH(TCP_MIB_ATTEMPTFAILS); | ||
| 919 | |||
| 917 | tcp_set_state(sk, TCP_CLOSE); | 920 | tcp_set_state(sk, TCP_CLOSE); |
| 918 | tcp_clear_xmit_timers(sk); | 921 | tcp_clear_xmit_timers(sk); |
| 919 | 922 | ||
