diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Kconfig.debug | 2 | ||||
-rw-r--r-- | lib/Makefile | 4 | ||||
-rw-r--r-- | lib/kobject_uevent.c | 5 | ||||
-rw-r--r-- | lib/zlib_inflate/inffast.c | 18 | ||||
-rw-r--r-- | lib/zlib_inflate/inflate.c | 55 | ||||
-rw-r--r-- | lib/zlib_inflate/inflate_syms.c | 1 |
6 files changed, 67 insertions, 18 deletions
diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug index 39fc6ae173b9..396c38b3cb69 100644 --- a/lib/Kconfig.debug +++ b/lib/Kconfig.debug | |||
@@ -294,6 +294,8 @@ config LOCK_STAT | |||
294 | help | 294 | help |
295 | This feature enables tracking lock contention points | 295 | This feature enables tracking lock contention points |
296 | 296 | ||
297 | For more details, see Documentation/lockstat.txt | ||
298 | |||
297 | config DEBUG_LOCKDEP | 299 | config DEBUG_LOCKDEP |
298 | bool "Lock dependency engine debugging" | 300 | bool "Lock dependency engine debugging" |
299 | depends on DEBUG_KERNEL && LOCKDEP | 301 | depends on DEBUG_KERNEL && LOCKDEP |
diff --git a/lib/Makefile b/lib/Makefile index 6b0ba8cf4e5f..4f3f3e256501 100644 --- a/lib/Makefile +++ b/lib/Makefile | |||
@@ -2,7 +2,7 @@ | |||
2 | # Makefile for some libs needed in the kernel. | 2 | # Makefile for some libs needed in the kernel. |
3 | # | 3 | # |
4 | 4 | ||
5 | lib-y := ctype.o string.o vsprintf.o kasprintf.o cmdline.o \ | 5 | lib-y := ctype.o string.o vsprintf.o cmdline.o \ |
6 | rbtree.o radix-tree.o dump_stack.o \ | 6 | rbtree.o radix-tree.o dump_stack.o \ |
7 | idr.o int_sqrt.o bitmap.o extable.o prio_tree.o \ | 7 | idr.o int_sqrt.o bitmap.o extable.o prio_tree.o \ |
8 | sha1.o irq_regs.o reciprocal_div.o argv_split.o | 8 | sha1.o irq_regs.o reciprocal_div.o argv_split.o |
@@ -13,7 +13,7 @@ lib-$(CONFIG_SMP) += cpumask.o | |||
13 | lib-y += kobject.o kref.o kobject_uevent.o klist.o | 13 | lib-y += kobject.o kref.o kobject_uevent.o klist.o |
14 | 14 | ||
15 | obj-y += div64.o sort.o parser.o halfmd4.o debug_locks.o random32.o \ | 15 | obj-y += div64.o sort.o parser.o halfmd4.o debug_locks.o random32.o \ |
16 | bust_spinlocks.o hexdump.o | 16 | bust_spinlocks.o hexdump.o kasprintf.o |
17 | 17 | ||
18 | ifeq ($(CONFIG_DEBUG_KOBJECT),y) | 18 | ifeq ($(CONFIG_DEBUG_KOBJECT),y) |
19 | CFLAGS_kobject.o += -DDEBUG | 19 | CFLAGS_kobject.o += -DDEBUG |
diff --git a/lib/kobject_uevent.c b/lib/kobject_uevent.c index df02814699d7..e06a8dcec0f0 100644 --- a/lib/kobject_uevent.c +++ b/lib/kobject_uevent.c | |||
@@ -280,9 +280,8 @@ EXPORT_SYMBOL_GPL(add_uevent_var); | |||
280 | #if defined(CONFIG_NET) | 280 | #if defined(CONFIG_NET) |
281 | static int __init kobject_uevent_init(void) | 281 | static int __init kobject_uevent_init(void) |
282 | { | 282 | { |
283 | uevent_sock = netlink_kernel_create(NETLINK_KOBJECT_UEVENT, 1, NULL, | 283 | uevent_sock = netlink_kernel_create(&init_net, NETLINK_KOBJECT_UEVENT, |
284 | NULL, THIS_MODULE); | 284 | 1, NULL, NULL, THIS_MODULE); |
285 | |||
286 | if (!uevent_sock) { | 285 | if (!uevent_sock) { |
287 | printk(KERN_ERR | 286 | printk(KERN_ERR |
288 | "kobject_uevent: unable to create netlink socket!\n"); | 287 | "kobject_uevent: unable to create netlink socket!\n"); |
diff --git a/lib/zlib_inflate/inffast.c b/lib/zlib_inflate/inffast.c index d84560c076d8..8550b0c05d00 100644 --- a/lib/zlib_inflate/inffast.c +++ b/lib/zlib_inflate/inffast.c | |||
@@ -69,22 +69,22 @@ | |||
69 | void inflate_fast(z_streamp strm, unsigned start) | 69 | void inflate_fast(z_streamp strm, unsigned start) |
70 | { | 70 | { |
71 | struct inflate_state *state; | 71 | struct inflate_state *state; |
72 | unsigned char *in; /* local strm->next_in */ | 72 | const unsigned char *in; /* local strm->next_in */ |
73 | unsigned char *last; /* while in < last, enough input available */ | 73 | const unsigned char *last; /* while in < last, enough input available */ |
74 | unsigned char *out; /* local strm->next_out */ | 74 | unsigned char *out; /* local strm->next_out */ |
75 | unsigned char *beg; /* inflate()'s initial strm->next_out */ | 75 | unsigned char *beg; /* inflate()'s initial strm->next_out */ |
76 | unsigned char *end; /* while out < end, enough space available */ | 76 | unsigned char *end; /* while out < end, enough space available */ |
77 | #ifdef INFLATE_STRICT | 77 | #ifdef INFLATE_STRICT |
78 | unsigned dmax; /* maximum distance from zlib header */ | 78 | unsigned dmax; /* maximum distance from zlib header */ |
79 | #endif | 79 | #endif |
80 | unsigned wsize; /* window size or zero if not using window */ | 80 | unsigned wsize; /* window size or zero if not using window */ |
81 | unsigned whave; /* valid bytes in the window */ | 81 | unsigned whave; /* valid bytes in the window */ |
82 | unsigned write; /* window write index */ | 82 | unsigned write; /* window write index */ |
83 | unsigned char *window; /* allocated sliding window, if wsize != 0 */ | 83 | unsigned char *window; /* allocated sliding window, if wsize != 0 */ |
84 | unsigned long hold; /* local strm->hold */ | 84 | unsigned long hold; /* local strm->hold */ |
85 | unsigned bits; /* local strm->bits */ | 85 | unsigned bits; /* local strm->bits */ |
86 | code const *lcode; /* local strm->lencode */ | 86 | code const *lcode; /* local strm->lencode */ |
87 | code const *dcode; /* local strm->distcode */ | 87 | code const *dcode; /* local strm->distcode */ |
88 | unsigned lmask; /* mask for first level of length codes */ | 88 | unsigned lmask; /* mask for first level of length codes */ |
89 | unsigned dmask; /* mask for first level of distance codes */ | 89 | unsigned dmask; /* mask for first level of distance codes */ |
90 | code this; /* retrieved table entry */ | 90 | code this; /* retrieved table entry */ |
@@ -92,7 +92,7 @@ void inflate_fast(z_streamp strm, unsigned start) | |||
92 | /* window position, window bytes to copy */ | 92 | /* window position, window bytes to copy */ |
93 | unsigned len; /* match length, unused bytes */ | 93 | unsigned len; /* match length, unused bytes */ |
94 | unsigned dist; /* match distance */ | 94 | unsigned dist; /* match distance */ |
95 | unsigned char *from; /* where to copy match from */ | 95 | unsigned char *from; /* where to copy match from */ |
96 | 96 | ||
97 | /* copy state to local variables */ | 97 | /* copy state to local variables */ |
98 | state = (struct inflate_state *)strm->state; | 98 | state = (struct inflate_state *)strm->state; |
diff --git a/lib/zlib_inflate/inflate.c b/lib/zlib_inflate/inflate.c index 7e1e3114a73e..0ad1ebf00947 100644 --- a/lib/zlib_inflate/inflate.c +++ b/lib/zlib_inflate/inflate.c | |||
@@ -332,14 +332,14 @@ static int zlib_inflateSyncPacket(z_streamp strm) | |||
332 | int zlib_inflate(z_streamp strm, int flush) | 332 | int zlib_inflate(z_streamp strm, int flush) |
333 | { | 333 | { |
334 | struct inflate_state *state; | 334 | struct inflate_state *state; |
335 | unsigned char *next; /* next input */ | 335 | const unsigned char *next; /* next input */ |
336 | unsigned char *put; /* next output */ | 336 | unsigned char *put; /* next output */ |
337 | unsigned have, left; /* available input and output */ | 337 | unsigned have, left; /* available input and output */ |
338 | unsigned long hold; /* bit buffer */ | 338 | unsigned long hold; /* bit buffer */ |
339 | unsigned bits; /* bits in bit buffer */ | 339 | unsigned bits; /* bits in bit buffer */ |
340 | unsigned in, out; /* save starting available input and output */ | 340 | unsigned in, out; /* save starting available input and output */ |
341 | unsigned copy; /* number of stored or match bytes to copy */ | 341 | unsigned copy; /* number of stored or match bytes to copy */ |
342 | unsigned char *from; /* where to copy match bytes from */ | 342 | unsigned char *from; /* where to copy match bytes from */ |
343 | code this; /* current decoding table entry */ | 343 | code this; /* current decoding table entry */ |
344 | code last; /* parent table entry */ | 344 | code last; /* parent table entry */ |
345 | unsigned len; /* length to copy for repeats, bits to drop */ | 345 | unsigned len; /* length to copy for repeats, bits to drop */ |
@@ -897,7 +897,7 @@ int zlib_inflateIncomp(z_stream *z) | |||
897 | 897 | ||
898 | /* Setup some variables to allow misuse of updateWindow */ | 898 | /* Setup some variables to allow misuse of updateWindow */ |
899 | z->avail_out = 0; | 899 | z->avail_out = 0; |
900 | z->next_out = z->next_in + z->avail_in; | 900 | z->next_out = (unsigned char*)z->next_in + z->avail_in; |
901 | 901 | ||
902 | zlib_updatewindow(z, z->avail_in); | 902 | zlib_updatewindow(z, z->avail_in); |
903 | 903 | ||
@@ -916,3 +916,50 @@ int zlib_inflateIncomp(z_stream *z) | |||
916 | 916 | ||
917 | return Z_OK; | 917 | return Z_OK; |
918 | } | 918 | } |
919 | |||
920 | #include <linux/errno.h> | ||
921 | #include <linux/slab.h> | ||
922 | #include <linux/vmalloc.h> | ||
923 | |||
924 | /* Utility function: initialize zlib, unpack binary blob, clean up zlib, | ||
925 | * return len or negative error code. */ | ||
926 | int zlib_inflate_blob(void *gunzip_buf, unsigned sz, const void *buf, unsigned len) | ||
927 | { | ||
928 | const u8 *zbuf = buf; | ||
929 | struct z_stream_s *strm; | ||
930 | int rc; | ||
931 | |||
932 | rc = -ENOMEM; | ||
933 | strm = kmalloc(sizeof(*strm), GFP_KERNEL); | ||
934 | if (strm == NULL) | ||
935 | goto gunzip_nomem1; | ||
936 | strm->workspace = kmalloc(zlib_inflate_workspacesize(), GFP_KERNEL); | ||
937 | if (strm->workspace == NULL) | ||
938 | goto gunzip_nomem2; | ||
939 | |||
940 | /* gzip header (1f,8b,08... 10 bytes total + possible asciz filename) | ||
941 | * expected to be stripped from input */ | ||
942 | |||
943 | strm->next_in = zbuf; | ||
944 | strm->avail_in = len; | ||
945 | strm->next_out = gunzip_buf; | ||
946 | strm->avail_out = sz; | ||
947 | |||
948 | rc = zlib_inflateInit2(strm, -MAX_WBITS); | ||
949 | if (rc == Z_OK) { | ||
950 | rc = zlib_inflate(strm, Z_FINISH); | ||
951 | /* after Z_FINISH, only Z_STREAM_END is "we unpacked it all" */ | ||
952 | if (rc == Z_STREAM_END) | ||
953 | rc = sz - strm->avail_out; | ||
954 | else | ||
955 | rc = -EINVAL; | ||
956 | zlib_inflateEnd(strm); | ||
957 | } else | ||
958 | rc = -EINVAL; | ||
959 | |||
960 | kfree(strm->workspace); | ||
961 | gunzip_nomem2: | ||
962 | kfree(strm); | ||
963 | gunzip_nomem1: | ||
964 | return rc; /* returns Z_OK (0) if successful */ | ||
965 | } | ||
diff --git a/lib/zlib_inflate/inflate_syms.c b/lib/zlib_inflate/inflate_syms.c index 2061d4f06765..67329fe9907e 100644 --- a/lib/zlib_inflate/inflate_syms.c +++ b/lib/zlib_inflate/inflate_syms.c | |||
@@ -16,4 +16,5 @@ EXPORT_SYMBOL(zlib_inflateInit2); | |||
16 | EXPORT_SYMBOL(zlib_inflateEnd); | 16 | EXPORT_SYMBOL(zlib_inflateEnd); |
17 | EXPORT_SYMBOL(zlib_inflateReset); | 17 | EXPORT_SYMBOL(zlib_inflateReset); |
18 | EXPORT_SYMBOL(zlib_inflateIncomp); | 18 | EXPORT_SYMBOL(zlib_inflateIncomp); |
19 | EXPORT_SYMBOL(zlib_inflate_blob); | ||
19 | MODULE_LICENSE("GPL"); | 20 | MODULE_LICENSE("GPL"); |