X-Git-Url: https://jxself.org/git/?a=blobdiff_plain;f=deblob-check;h=58af8535174620256fc689c8f83214cb8603c3fe;hb=0d3c0a07aaae93163e5ce2e115964988afa2026e;hp=20cb7f1ba0bd8b3970c70df8dfe2a0de23f19623;hpb=6930c01f61782668399f52991dd3af85a6d883d3;p=releases.git diff --git a/deblob-check b/deblob-check index 20cb7f1ba0bd..58af85351746 100755 --- a/deblob-check +++ b/deblob-check @@ -1,6 +1,6 @@ #! /bin/sh -# deblob-check version 2009-03-17 +# deblob-check version 2009-03-24 # Inspired in gNewSense's find-firmware script. # Written by Alexandre Oliva @@ -80,14 +80,14 @@ # context around the blobs. # -X --print-all-matches: print all blobs, be they known false -# positives or blobs. +# positives or actual blobs. # -x --list-all-matches: list files that contain sequences that appear # to be blobs, be they known false positives or not. # -p --mark-false-positives: print the processed input, replacing -# sequences that match the blob detector test, but that -# are known to be false positives, with /*(DEBLOBBED)*/. +# sequences that match the blob detector test, even those +# known to be false positives, with /*(DEBLOBBED)*/. # -P --list-false-positives: list files that contain false positives. @@ -226,6 +226,25 @@ case ${LANG+set} in set) LANG=C; export LANG;; esac rm="rm -f" + +for echo in 'echo' 'printf %s\n'; do + case `$echo '\nx'` in + '\nx') break;; + esac +done +case `$echo '\nx'` in +'\nx') ;; *) echo Cannot find out what echo to use >&2; exit 1;; +esac + +for echo_n in "echo -n" "printf %s"; do + case `$echo_n '\na'; $echo_n '\nb'` in + '\na\nb') break;; + esac +done +case `$echo_n a; $echo_n b` in +'ab') ;; *) echo Cannot find out an echo -n equivalent to use >&2; exit 1;; +esac + case $1 in --save-scripts | -S) shift @@ -395,7 +414,9 @@ case $1 in set_sed_cmd () { set_sedmain "" "" " i\\ -$file +$file\\ +/*(DEBLOB-\\ +ERROR)*/ q 1;" } ;; @@ -405,10 +426,14 @@ q 1;" set_sed_cmd () { set_sedmain " i\\ -$file +$file\\ +/*(DEBLOB-\\ +ERROR)*/ q 1;" "" " i\\ -$file +$file\\ +/*(DEBLOB-\\ +ERROR)*/ q 1;" } ;; @@ -438,7 +463,9 @@ q 1;" set_sed_cmd () { set_sedmain " i\\ -$file +$file\\ +/*(DEBLOB-\\ +ERROR)*/ q 1;" } ;; @@ -839,14 +866,15 @@ set_except () { accept 'There is an USB interface for downloading[/]uploading.*request_firmware interface\.' Documentation/video4linux/si470x.txt accept '[\t]- move firmware loading to request_firmware()' drivers/staging/slicoss/README accept 'config FIRMWARE_IN_KERNEL.*let firmware be loaded from userspace\.' drivers/base/Kconfig + accept '[ ]*and request_firmware() in the source' drivers/base/Kconfig accept 'static int[\n]_request_firmware(const struct firmware \*\*firmware_p, const char \*name,[^{]*[\n]{[\n]\([^}]\|[^\n}]}*\)*[\n]}[\n]' drivers/base/firmware_class.c accept 'static int[\n]request_firmware_work_func(void \*arg)[\n]{[\n]\([^}]\|[^\n}]}*\)*ret = _request_firmware(\([^}]\|[^\n}]}*\)*[\n]}[\n]' drivers/base/firmware_class.c accept '[/][*][*][\n] [*] request_firmware: - send firmware [^{]*[\n]{[\n]\([^}]\|[^\n}]}*\)*[\n]}[\n]' drivers/base/firmware_class.c accept '[/][*][*][\n] [*] request_firmware_nowait: asynchronous version[^{]*[\n]{[\n]\([^}]\|[^\n}]}*\)*[\n]}[\n]' drivers/base/firmware_class.c accept 'EXPORT_SYMBOL(request_firmware\(_nowait\)\?);' drivers/base/firmware_class.c accept 'int request_firmware\(_nowait\)\?([^;]*);' include/linux/firmware.h - accept 'static inline int request_firmware\(_nowait\)\?([^{]*)[\n]{[\n][\t]return -EINVAL;[\n]}[\n]' include/linux/firmware.h - accept 'static inline int \(maybe_\)\?reject_firmware\(_nowait\)\?([^{;]*)[\n]{[\n]\([^}]\|[^\n}]}*\)*[\n]}[\n]' include/linux/firmware.h + accept 'static inline int request_firmware\(_nowait\)\?([^{]*)[\n]{[\n][\t]return -EINVAL;[\n]}' include/linux/firmware.h + accept 'static inline int[\n]\(maybe_\)\?reject_firmware\(_nowait\)\?([^{;]*)[\n]{[\n]\([^}]\|[^\n}]}*\)*[\n]}' include/linux/firmware.h accept 'static inline int request_ihex_firmware\?([^{]*)[\n]{[\n]\([^}]\|[^\n}]}*\)*[\n]}[\n]' include/linux/ihex.h ocomment '[/][*] Optional firmware\([^\n]*[\n] [*]\)*[^\n]* MODULE_FIRMWARE()' @@ -889,7 +917,7 @@ set_except () { blob ' sprintf([^;]*fore200[^;]*FW_EXT[^;]*);' drivers/atm/fore200e.c blobname '\(pc\|sb\)a200e\(_ecd\)\?\.bin[12]?' drivers/atm/fore200e.c - blobna 'The supplied firmware images.*fore.*Rebuild and reinstall[^.]*\.' Documentation/networking/fore200e.txt + blobna 'The supplied firmware images.*fore.*Rebuild and re-install[^.]*\.' Documentation/networking/fore200e.txt blobname 'intelliport2\.bin' drivers/char/ip2/ip2main.c @@ -904,8 +932,8 @@ set_except () { blob ' r128_cce_load_microcode([^;]*);' drivers/gpu/drm/r128/r128_cce.c blob 'static const u32 R[S0-9]*0_cp_microcode\[\]\[2\] = {[^{};]*};\([\n][\n]*static const u32 R[S0-9]*0_cp_microcode\[\]\[2\] = {[^{};]*};\)*' drivers/gpu/drm/radeon/radeon_microcode.h - blob 'static void radeon_cp_load_microcode([^{]*)[\n]{[\n]\([^}]\|[^\n}]}*\)*[\n]}[\n]' drivers/gpu/drm/radeon/radeon_cp.c - blob ' radeon_cp_load_microcode([^;]*);' drivers/gpu/drm/radeon/radeon_cp.c + blob '\([/][*] Load the microcode\([^/]\|[^*/][/]*\)*[*][/][\n]\)\?static void radeon_cp_load_microcode([^{]*)[\n]{[\n]\([^}]\|[^\n}]}*\)*[\n]}[\n]' drivers/gpu/drm/radeon/radeon_cp.c + blobna 'radeon_cp_load_microcode([^;]*);' drivers/gpu/drm/radeon/radeon_cp.c blob 'sub \(sp887[0x]\|tda1004\(5\|6\(lifeview\)\?\)\|av7110\|dec\(2\(00\|54\)0t\|3000s\)\|opera1\|vp7041\|dibusb\|nxt200[24]\|or51\(211\|132_\(qam\|vsb\)\)\|bluebird\) *{\([^}]*\|[^\n]}*\)[\n]}\([\n][\n]*sub \(sp887[0x]\|tda1004\(5\|6\(lifeview\)\?\)\|av7110\|dec\(2\(00\|54\)0t\|3000s\)\|opera1\|vp7041\|dibusb\|nxt200[24]\|or51\(211\|132_\(qam\|vsb\)\)\|bluebird\) *{\([^}]*\|[^\n]}*\)[\n]}\)*' Documentation/dvb/get_dvb_firmware blobna 'Please use[^\n]*firmware[^\n]*sp887x[^\n]*\([\n][^\n]\+\)\+' Documentation/dvb/avermedia.txt @@ -939,13 +967,15 @@ set_except () { blob 'static u32 tigon2\?Fw\(Text\|Rodata\|Data\)\[(MAX_\(TEXT\|RODATA\|DATA\)_LEN\/4) + 1\] __devinitdata = {[^}]*};\([\n]static u32 tigon2\?Fw\(Text\|Rodata\|Data\)\[(MAX_\(TEXT\|RODATA\|DATA\)_LEN\/4) + 1\] __devinitdata = {[^}]*};\)*' drivers/net/acenic_firwmare.h blob '#define tigon2\?Fw[^ ]*\(Addr\|Len\) 0x[^\n]*\([\n]#define tigon2\?Fw[^ ]*\(Addr\|Len\) 0x[^\n]*\)\+' drivers/net/acenic_firmware.h - blob '\([/][*]\([^/]*\|[^*/][/]*\)*Do not try to clear\([^/]*\|[^*/][/]*\)*[*][/][\n] \)\?ace_clear[^;]*;[\n]\([^}]*{[^}]*ace_copy[^}]*tigon2\?Fw[^}]*}\)*[\n]\+ return 0;[\n]}' + blob '\([/][*]\([^/]*\|[^*/][/]*\)*Do not try to clear\([^/]*\|[^*/][/]*\)*[*][/][\n] \)\?ace_clear[^;]*;[\n]\([^}]*{[^}]*ace_copy[^}]*tigon2\?Fw[^}]*}\)*[\n]\+ return 0;[\n]}' drivers/net/acenic.c + blob 'if (\(ACE_IS_TIGON_I(ap)\|ap->version == 2\))[\n] writel(tigon2\?FwStartAddr, [&]regs->Pc);\([\n] if (\(ACE_IS_TIGON_I(ap)\|ap->version == 2\))[\n] writel(tigon2\?FwStartAddr, [&]regs->Pc);\)*' drivers/net/acenic.c blob '#include "starfire_firmware\.h"' drivers/net/starfire.c blob '[/][*]\([^/]*\|[^*/][/]*\)*Load Rx\/Tx firmware\([^/]*\|[^*/][/]*\)*[*][/]\([\n] for ([^)]*FIRMWARE_[RT]X_SIZE[^)]*)[\n] writel[^;]*firmware_[rt]x[^;]*;\)\+' drivers/net/starfire.c blob 'static \(u8\|const u32\|struct fw_info\) bnx2_\(\(COM\|CP\|[RT]XP\|TPAT\)_b0[69]Fw\(Text\|Data\|Rodata\)\|\(xi_\)\?rv2p_proc[12]\|\(com\|cp\|[rt]xp\|tpat\)_fw_0[69]\)\(\[[^]};]*\]\)* = {[^}]*};\([\n][\n]*static \(u8\|const u32\|struct fw_info\) bnx2_\(\(COM\|CP\|[RT]XP\|TPAT\)_b0[69]Fw\(Text\|Data\|Rodata\)\|\(xi_\)\?rv2p_proc[12]\|\(com\|cp\|[rt]xp\|tpat\)_fw_0[69]\)\(\[[^]};]*\]\)* = {[^}]*};\)*' 'drivers/net/bnx2_fw2\?.h' blob '#include "bnx2_fw2\?\.h"\([\n][\n]*#include "bnx2_fw2\?\.h"\)*' drivers/net/bnx2.c + blob 'static void[\n]load_rv2p_fw([^{]*)[\n]{[\n]\([^}]\|[^\n}]}*\)*[\n]}' drivers/net/bnx2.c blob 'static int[\n]bnx2_init_cpus([^{]*)[\n]{[\n]\([^}]\|[^\n}]}*\)*[\n]}' drivers/net/bnx2.c # init_data_e1h? might actually be just data, but it doesn't @@ -957,6 +987,7 @@ set_except () { blobna 'static u16 \(sr\|twinax\)_edc\[\] = {[^;]*};' drivers/net/cxgb3/ael1002.c blobna 'for ([^\n]*ARRAY_SIZE(\(sr\|twinax\)_edc)[^\n]*)[\n][^;]*mdio_write[^;]*;' drivers/net/cxgb3/ael1002.c + blobname 't3fw\(_protocol_sram\)\?-\(%d\|[0-9]*\)\.\(%d\|[0-9]*\)\.\(%d\|[0-9]*\)\.bin' drivers/net/cxgb3/cxgb3_main.c blob '\([/][*][*]*[*][/][\n]*\)*\([/][*]\([^/]\|[^*/][/]*\)*Micro code\([^/]\|[^*/][/]*\)*8086:\([^/]\|[^*/][/]*\)*[*][/]\([\n]*[/][*]\([^/]\|[^*/][/]*\)*[*][/]\)*\|#define *D10\(1M\(_B\)\?\|1S\|2_E\)_\(CPUSAVER_\(TIMER\|BUNDLE\|MIN_SIZE\)_DWORD\|RCVBUNDLE_UCODE\)[ ]\(\\[\n]\|[^\n]\)*\)\([\n]*[/][*]\([^/]\|[^*/][/]*\|[*][/][\n]*[/][*]\)*Micro code\([^/]\|[^*/][/]*\)*8086:\([^/]\|[^*/][/]*\)*[*][/]\([\n]*[/][*]\([^/]\|[^*/][/]*\)*[*][/]\)*\|[\n][\n]*#define *D10\(1M\(_B\)\?\|1S\|2_E\)_\(CPUSAVER_\(TIMER\|BUNDLE\|MIN_SIZE\)_DWORD\|RCVBUNDLE_UCODE\)[ ]\(\\[\n]\|[^\n]\)*\)*' drivers/net/e100.c blobna '\([/][*]\([^/]\|[*][/]*\)*[*][/][\n]* \)\(ucode\[opts->\(timer\|bundle\|min_size\)_dword\] .= [^;]*;[\n][\n]* \)*[^}]*UCODE_SIZE[^}]*cb_ucode[^}]*return;[\n] }' drivers/net/e100.c @@ -990,7 +1021,7 @@ set_except () { blob 'static const u8 microcode\[\] = {[^}]*} *;' drivers/net/tokenring/3c359_microcode.h blob '#include "3c359_microcode\.h"' drivers/net/tokenring/3c359.c - blobna '\(printk(KERN_INFO "3C359: Uploading Microcode: ");[\n ]*\)\?for ([^{]*\(mc_size[^{]*) {[^}]*writeb(microcode\[\|) {[^}]*writeb(microcode\[mc_size\)[^}]*}\([\n][ ]*printk[^\n]*;[\n ]*for ([^{]*\(mc_size[^{]*) {[^}]*writeb(microcode\[\|) {[^}]*writeb(microcode\[mc_size\)[^}]*}\)*' drivers/net/tokenring/3c359.c + blobna 'start = (0xFFFF - (mc_size)[^;]*;[\n ]*[/][*]\([^/]\|[^*/][/]*\)*[*][/][\n ]*printk(KERN_INFO "3C359: Uploading Microcode: ");[\n ]*for ([^{]*\(mc_size[^{]*) {[^}]*writeb(microcode\[\|) {[^}]*writeb(microcode\[mc_size\)[^}]*}\([\n][ ]*printk[^\n]*;[\n ]*for ([^{]*\(mc_size[^{]*) {[^}]*writeb(microcode\[\|) {[^}]*writeb(microcode\[mc_size\)[^}]*}\)*' drivers/net/tokenring/3c359.c blobname 'tr_smctr\.bin' drivers/net/tokenring/smctr.c @@ -1043,13 +1074,15 @@ set_except () { blob 'yamaha[/]yss225_registers\.bin' sound/isa/wavefront/wavefront_fx.c blobna 'firmware = [&]yss225_registers_firmware;' sound/isa/wavefront/wavefront_fx.c blob 'static const struct firmware yss225_registers_firmware = {[^;]*};' sound/isa/wavefront/wavefront_fx.c - blob 'wavefront\.os' sound/isa/wavefront/wavefront_synth.c + blob 'ospath[ ]*- Pathname[^\n]ICS2115.*wavefront\.os\([^\n]\|[^.][\n]\)*' Documentation/sound/alsa/ALSA-Configuration.txt + blobname 'wavefront\.os' sound/isa/wavefront/wavefront_synth.c blobna 'and[\n]require the use of[^\n]*propr\?ietary[^:]*' Documentation/arm/IXP4xx blob 'If you need to use any of the above[^\n]*download[^:]*:[\n ]*http:[^\n]*ixp4[^\n]*' Documentation/arm/IXP4xx accept 'int xc_request_firmware(struct xc *[*] *x);' arch/arm/mach-netx/include/mach/xc.h accept 'int xc_request_firmware(struct xc *[*] *x)[\n]{' arch/arm/mach-netx/xc.c + accept ' dev_err(x->dev, "request_firmware failed\\n");' arch/arm/mach-netx/xc.c accept 'EXPORT_SYMBOL(xc_request_firmware);' arch/arm/mach-netx/xc.c accept ' if (xc_request_firmware(priv->xc)) {' drivers/net/netx-eth.c @@ -1078,7 +1111,7 @@ set_except () { blobname 'isi\(6\(08\|\(08\|16\)em\)\|46\(08\|16\)\)\.bin' drivers/char/isicom.c - blobname 'c\(218t\|p204\|320t\)unx\.code' drivers/char/moxa.c + blobname 'c\(218t\|p204\|320t\)unx\.cod' drivers/char/moxa.c accept ' printk(KERN_ERR "MOXA: request_firmware failed' drivers/char/moxa.c # This driver enables the user to update the non-Free BIOS, but it @@ -1086,7 +1119,8 @@ set_except () { # doesn't require any non-Free firwmare to function, and it # doesn't actually recommend users to perform updates, so I'm # leaving it in. - accept ' req_firm_rc = request_firmware_nowait([^;], "dell_rbu",' drivers/firmware/dell_rbu.c + accept ' req_firm_rc = request_firmware_nowait([^;]*, "dell_rbu",' drivers/firmware/dell_rbu.c + accept ' *"dell_rbu:%s request_firmware_nowait"' drivers/firmware/dell_rbu.c blobname 'xc3028-v27\.fw' drivers/media/common/tuners/tuner-xc2028.h blobname 'xc3028L-v36\.fw' drivers/media/common/tuners/tuner-xc2028.h @@ -1094,22 +1128,30 @@ set_except () { blobname 'dvb-fe-xc5000-1\.1\.fw' drivers/media/common/tuners/xc5000.c blobname '4210\(100[12]\|%4X\)\.sb' drivers/net/irda/irda-usb.c + blobna '[/][*][ \n*]* Known firmware\([^/]\|[^*/][/]*\)*\(STIR421x\|4210\(100[12]\|%4X\)\.sb\)\([^/]\|[^*/][/]*\)*[*][/]' drivers/net/irda/irda-usb.c blobname 'myri10ge_\(rss_\)\?ethp\?_z8e\.dat' drivers/net/myri10ge.c + blobna 'If the driver can neither enable ECRC\([^/]\|[^*/][/]*\)*myri10ge_\(rss_\)\?ethp\?_z8e\.dat\([^/]\|[^*/][/]*\)*[*][/]' drivers/net/myri10ge.c blobname 'spider_fw\.bin' drivers/net/spider_net.h blobname 'tms380tr\.bin' drivers/net/tokenring/tms380tr.c blobname 'atmel_at76c50\(2\([de]\|_3com\)\?\|4a\?\(_2958\)\?\|6\)\(\.bin\)\?' drivers/net/wireless/atmel.c + accept ' *priv->firmware = \(NULL\|new_firmware\);' drivers/net/wireless/atmel.c - blobname 'b43[^/]*[/]\(%s\|ucode\(5\|1[13]\)\|pcm5\|[abn]0g[01]initvals\(5\|1[13]\)\)\.fw' 'drivers/net/wireless/b43\(legacy\)\?/main.c' + blobname 'b43\(legacy\)\?\(%s\)\?[/]\(%s\|ucode\(5\|1[13]\)\|pcm5\|[abn]0g[01]initvals\(5\|1[13]\)\)\.fw' 'drivers/net/wireless/b43\(legacy\)\?/main.c' + blobna 'b43legacyerr([^;]*must go to http[^;]*b43#devicefirmware[^;]*);' drivers/net/wireless/b43legacy/main.c - blob '#define IPW2100_FW_\(\(MAJOR\|MINOR\)\(_VERSION\|(x)\)\|VERSION\) \([^\n]\|[\\][\n]\)*\([\n][\n]*#define IPW2100_FW_\(\(MAJOR\|MINOR\)\(_VERSION\|(x)\)\|VERSION\) \([^\n]\|[\\][\n]\)*\)*' drivers/net/wireless/ipw2100.c + blob '#define IPW2100_FW_\(\(\(MAJOR\|MINOR\)_VERSION\|\(MAJOR\|MINOR\)(x)\)\|VERSION\)\([^\n]*\\[\n]\)*[^\n]*\([\n][\n]*#define IPW2100_FW_\(\(\(MAJOR\|MINOR\)_VERSION\|\(MAJOR\|MINOR\)(x)\)\|VERSION\)\([^\n]*\\[\n]\)*[^\n]*\)*' drivers/net/wireless/ipw2100.c blobname 'ipw2100-\("\([^"\n]\|[\\][\n]\)*"\([^"]\|[\\]["]\)*\)\+' drivers/net/wireless/ipw2100.c blobname '__stringify(IPW2100_FW_MINOR_VERSION)' drivers/net/wireless/ipw2100.c + accept ' *Portions of ipw2100_\(do_\)\?mod_firmware_load[, ]*\(ipw2100_\(do_\)\?mod_firmware_load[, and\n]*\)*' drivers/net/wireless/ipw2100.c + accept ' ipw2100_mod_firmware_load(fw);' drivers/net/wireless/ipw2100.c + accept 'static int ipw2100_mod_firmware_load(' drivers/net/wireless/ipw2100.c + blobna 'if (IPW2100_FW_MAJOR[^{]*{[^}]* }' drivers/net/wireless/ipw2100.c - accept '[/][*] Call this function from process context\([^/]\|[^*][/]*\)*request_firmware' drivers/net/wireless/ipw2200.c + accept '[/][*] Call this function from process context\([^/]\|[^*/][/]*\)*request_firmware' drivers/net/wireless/ipw2200.c blobname 'ipw2200-\(i\?bss\|sniffer\)\.fw' drivers/net/wireless/ipw2200.c accept ' IPW_ERROR("%s request_firmware failed' drivers/net/wireless/ipw2200.c @@ -1117,15 +1159,21 @@ set_except () { accept ' [*] request_firmware() is synchronous' 'drivers/net/iwlwifi/iwl\(3945-base\|-agn\)\.c' blobname 'libertas_cs\(_helper\)\?\.fw' drivers/net/wireless/libertas/if_cs.c - blobname 'sd\(8385\|8686\)\(_helper\)\?\.bin' drivers/net/wireless/libertas/if_sdio.c - + accept ' *card->firmware = \(if_sdio\|lbs_fw\)' drivers/net/wireless/libertas/if_sdio.c blobname 'usb8388\(-5\.126\.0\.p5\)\?\.bin' drivers/net/wireless/libertas/if_usb.c - accept ' lbs_pr_err("request_firmware() failed' drivers/net/wireless/ipw2200.c + blob '[/][*]\([^/]\|[^*/][/]*\)*usb8388\(-5\.126\.0\.p5\)\?\.bin\([^/]\|[^*/][/]*\)*[*][/]' drivers/net/wireless/libertas/if_usb.c + accept ' lbs_pr_err("request_firmware() failed' drivers/net/wireless/if_usb.c + blobna 'o\. Copy the firmware image[^\n]*usb8388\([^\n]\|[\n][ ]*[^ \n]\)*' drivers/net/wireless/libertas/README + blobna '\[fw_name=usb8388[^]]*\]' drivers/net/wireless/libertas/README + + blobname 'usb8388\.bin' drivers/base/Kconfig blobname 'lbtf_usb\.bin' drivers/net/wireless/libertas_tf/if_usb.c blobname 'isl38\(86\|87usb_bare\|90usb\)' 'drivers/net/wireless/p54/p54\(pci\.c\|usb\.[ch]\)' + blob '[/][*] for isl3886 register definitions\([^/]\|[^*/][/]*\)*[*][/]' drivers/net/wireless/p54/p54usb.h + blobna 'If you enable this\([^\n]\|[\n][ ]*[^ \n]\)*isl3890\([^\n]\|[\n][ ]*[^ \n]\)*' drivers/net/wireless/Kconfig blobname 'isl38\(77\|86\|90\)' drivers/net/wireless/prism54/islpci_dev.c @@ -1166,7 +1214,7 @@ set_except () { blobname 'fsl_qe_ucode_uart_\(%u\|0-9]*\)_\(%u\|[0-9]*\)\(%u\|[0-9]*\)\.bin' drivers/serial/ucc_uart.c - blobname 'atmel_at76c50\(3-\(i386[13]\|rfmd\(-acc\)\?\|5\(a\(mx\)\?\)\?-rfmd\(2958\)\?\)\)\.bin' drivers/staging/at76_usb/at76_usb.c + blobname 'atmel_at76c50\(3-\(i386[13]\|rfmd\(-acc\)\?\)\|5\(a\(mx\)\?\)\?-rfmd\(2958\)\?\)\.bin' 'drivers/\(staging\|net/wireless\)/at76_usb/at76_usb\.c' blobname 'go7007\(fw\|tv\)\.bin' 'drivers/staging/go7007/\(go7007-\(driver\|usb\)\|saa7134-go7007\)\.c' @@ -1208,13 +1256,15 @@ set_except () { blobname '\(pcxhr[/]\)\?\(x[ic]_1_882\.dat\|[ebd]321_512\.[ebd]56\)' sound/pci/pcxhr/pcxhr_hwdep.c + blobna 'You need to install[\n]*riptide\.hex[\n]\.[\n]' Documentation/sound/alsa/ALSA-Configuration.txt blobname 'riptide\.hex' sound/pci/riptide/riptide.c + defsnc 'static union firmware_version firmware_versions\[\] =' sound/pci/riptide/riptide.c blobname '\(multi\|digi\)face_firmware\(_rev11\)\?\.bin' sound/pci/rme9652/hdsp.c blobname 'aica_firmware\.bin' sound/sh/aica.c - accept ' [*]\([^/]\|[^*]*[/]*\)*Caution: This API\([^/]\|[^*]*[/]*\)*request_firmware.' sound/sound_firmware.c + accept ' [*]\([^/]\|[^*/][/]*\)*Caution: This API\([^/]\|[^*/][/]*\)*request_firmware.' sound/sound_firmware.c accept 'static int do_mod_firmware_load(' sound/sound_firmware.c accept 'int mod_firmware_load(' sound/sound_firmware.c accept ' r = do_mod_firmware_load(' sound/sound_firmware.c @@ -1225,18 +1275,28 @@ set_except () { accept ' PERMCODESIZE = mod_firmware_load(PERMCODEFILE, [&]PERMCODE);' sound/oss/msnd_pinnacle.c blobname '\([/]etc[/]sound[/]\)\?pndsp\(ini\|erm\)\.bin' sound/oss/msnd_pinnacle.h blobname '\([/]etc[/]sound[/]\)\?msnd\(init\|perm\)\.bin' sound/oss/msnd_classic.h + blobna '\(Important Notes - Read Before Using\|Obtaining and Creating Firmware Files\)[\n]# ~*\([^\n]\|[\n]# *\([\n]# *\([\n]# *For the[^\n]*[\n]# *~*[\n]\)\?\)\?[^\n ]\)*\.' Documentation/sound/oss/MultiSound - accept ' len = mod_firmware_load(fn, [&]data);[\n] if [^{]* {[\n] printk(KERN_ERR "sscape:' sound/oss/sscape.c + accept ' len = mod_firmware_load(fn, [&]data);[\n] if [^{]* {[\n] [ ]*printk(KERN_ERR "sscape:' sound/oss/sscape.c blobname '[/]sndscape[/]scope\.co[dx]' sound/oss/sscape.c accept ' trix_boot_len = mod_firmware_load(' sound/oss/trix.c blobname '\([/]etc[/]sound[/]\)\?trxpro\.bin' sound/oss/trix.c - accept ' smw_ucodeLen = mod_firwmare_load(' sound/oss/sb_common.c - blobname '\([/]etc[/]sound[/]\)\?msnd\(init\|perm\)\.bin' sound/oss/sb_common.c - - accept ' pss_synthLen = mod_firmware_load(pss_firmware' sound/oss/pss.c + accept ' smw_ucodeLen = mod_firmware_load(' sound/oss/sb_common.c + blobname '\([/]etc[/]sound[/]\)\?midi0001\.bin' sound/oss/sb_common.c + blobname '\([/]etc[/]sound[/]\)\?msnd\(init\|perm\)\.bin' sound/oss/Kconfig + + blob 'When the module is loaded\([^\n]\|[\n][^\n]\)*[/]pss_synth\([^\n]\|[\n][^\n]\)*' Documentation/sound/oss/PSS + blob 'pss_firmware[ \n ]*This parameter\([^\n]\|[\n][^\n]\)*[/]pss_synth\([^\n]\|[\n][^\n]\)*' Documentation/sound/oss/PSS-updates + accept ' pss_synthLen = mod_firmware_load(pss_firmware, (void [*]) [&]pss_synth);' sound/oss/pss.c + accept ' *if \?(\(!\|fw_load [&][&] \)\?pss_synth' sound/oss/pss.c + accept ' *if (!pss_download_boot(devc, pss_synth, pss_synthLen,' sound/oss/pss.c + accept ' *vfree(pss_synth);' sound/oss/pss.c + blob 'to allow the user \([^/"]\|[^*"][/]*\)*fir[em]ware file\([^/"]\|[^*"][/]*\)*"[^"]*"' sound/oss/pss.c blobname '\([/]etc[/]sound[/]\)\?pss_synth' sound/oss/pss.c + accept ' \$(obj)[/]bin2hex pss_synth' sound/oss/Makefile + accept ' *echo '"'"'static \(unsigned char [*] *\|int \)pss_synth\(Len\)\? = \(NULL\|0\);' sound/oss/Makefile accept ' \.request_firmware = NULL,' drivers/media/dvb/dvb-usb/m920x.c @@ -1257,6 +1317,7 @@ set_except () { blobname 'dvb-fe-nxt2002\.fw' drivers/media/dvb/frontends/nxt200x.c + blob '[/][*][\n] [*] This driver needs two external firmware files\([^/]\|[^*/][/]*\)*dvb-fe-or51132-\(vsb\|qam\)\.fw\([^/]\|[^*/][/]*\)*[*][/]' drivers/media/dvb/frontends/or51132.c blobname 'dvb-fe-or51132-\(vsb\|qam\)\.fw' drivers/media/dvb/frontends/or51132.c blobname 'dvb-fe-or51211\.fw' drivers/media/dvb/frontends/or51211.c @@ -1320,6 +1381,8 @@ set_except () { blobname 'dvb-usb-digitv-02\.fw' drivers/media/dvb/dvb-usb/digitv.c + blob 'Driver: \(korg1212\|maestro3\|ymfpci\|smctr\|kaweth\|ttusb-budget\|keyspan\|emi26\|emi62\|tu_usb_3410_5052\|whiteheat\|ip2\|CPiA2\|DABUSB\|USB_VICAM\|USB_SERIAL_EDGEPORT\(_TI\)\?\|SND_SB16_CSP\|CASSINI\) --* \([^\n]\|[\n]*[^\n\-]\)*\([\n][\n]--*[\n][\n]Driver: \(korg1212\|maestro3\|ymfpci\|smctr\|kaweth\|ttusb-budget\|keyspan\|emi26\|emi62\|tu_usb_3410_5052\|whiteheat\|ip2\|CPiA2\|DABUSB\|USB_VICAM\|USB_SERIAL_EDGEPORT\(_TI\)\?\|SND_SB16_CSP\|CASSINI\) --* \([^\n]\|[\n]*[^\n\-]\)*\)*' firmware/WHENCE + # This looks suspicious, but it pretty much just sets stuff to zero. initnc 'static __u8 mode8420\(pro\|con\)\[\] =' drivers/media/video/cs8420.h @@ -1732,6 +1795,8 @@ set_except () { defsnc 'static u8 serit_sp1511lhb_inittab\[\] =' drivers/media/dvb/frontends/si21xx.c defsnc 'static u8 stv0288_inittab\[\] =' drivers/media/dvb/frontends/stv0288.c + blobname 'haup-ir-blaster\.bin' drivers/input/lirc/lirc_zilog.c + # Suspicious, deblob for now, until contributor responds. # defsnc ' static u16 \(sr\|twinax\)_edc\[\] =' drivers/net/cxgb3/ael1002.cn # Non-Free license in entire file. @@ -1961,6 +2026,10 @@ set_except () { ;; */linux-2.6*-lirc.patch) initnc 'const unsigned char map_table\[\] =' + blobname 'haup-ir-blaster\.bin' drivers/input/lirc/lirc_zilog.c + ;; + */linux-2.6*-at76.patch) + blobname 'atmel_at76c50\(3-\(i386[13]\|rfmd\(-acc\)\?\)\|5\(a\(mx\)\?\)\?-rfmd\(2958\)\?\)\.bin' drivers/net/wireless/at76_usb/at76_usb.c ;; */linux-2.6-modsign-mpilib.patch) initnc 'const unsigned char __clz_tab\[\] =' @@ -2067,7 +2136,7 @@ bol="\\(^\\|[\\n]\\)" eol="\\([\\n]\\|\$\\)" # Regular expression that matches a C-style comment. -comment="\\([/][*]\\([^*]*\\|[*]\\+[^/*]\\)*[*]\\+[/]\\|[/][/][^\\n]*[\\n]\\)" +comment="\\([/][*]\\([^/]\\|[^*/][/]*\\)*[*][/]\\|[/][/][^\\n]*[\\n]\\)" # Regular expression that matches comments typically used in assembly. asmcomment="\\($comment\\|[;#][^\\n]*[\\n]\\)" @@ -2113,7 +2182,7 @@ set_sedmain () { # Regular expression that matches one or more blobs without # intervening line breaks. - sblobctx="\\([^\\n]*$bloblong\\)\\+" + sblobctx="\\(\([^\\n]\|[/][*](DEBLOB-\\nBED)[*][/]\)*$bloblong\\)\\+" # Regular expression that matches the context for a long blob match. lblobctx="\\($initblob\\|$defineblob\\|$asmblob\\|$sblobctx\\)" @@ -2138,15 +2207,20 @@ g; fi sedmain=" -/^[\n]\?;[/][*]\\(end .*\\)\\?[*][/];$/{ +/^$/N; +/^[\\n]\\?;[/][*]\\(end .*\\)\\?[*][/];$/{ $4; d; } /^;[/][*]begin /!{ : internal_error + $v:internal_error i\\ Internal error at p; + i\\ +/*(DEBLOB-\\ +ERROR)*/ q 2; } $v:reading file in @@ -2161,8 +2235,9 @@ n; H; g; $4 -s/^\(;[/][*]begin [^\n]*[\n]\)*//; -s/\\($bol;[/][*]\\(end [^\n]*\\)\\?[*][/];\\)*$//; +$v:read all +s/^\\(;[/][*]begin [^\\n]*[\\n]\\)*//; +s/\\($bol[\n]\?;[/][*]\\(end [^\\n]*\\)\\?[*][/];\\)*$//; $v:???!blobfast /$blobfast/!b clean; $check_false_positives @@ -2255,6 +2330,7 @@ $v:print_blobs # This is tricky. We don't want to print the false positive. /^$falsepos[^\\n]*$blobfast/ { $v:delete false positive immediately followed by blob + s/^\\($falsepos\\)/\\1\/*(DEBLOB-\\nBED)*\//; h; s/^\\($falsepos\\).*/\\1/; $v:matched false positive @@ -2269,10 +2345,12 @@ $v:print_blobs G; b print_blobs_delete_to_eol; } - s/^$falsepos//; - b print_blobs_delete_to_eol; + /^$falsepos[/][*](DEBLOB-\\nBED)[*][/]/! { + s/^$falsepos//; + b print_blobs_delete_to_eol; + } } -/^[^\\n]*$blobfast/! { +/^\([^\\n]\|[/][*](DEBLOB-\\nBED)[*][/]\)*$blobfast/! { $v:delete non-blob header h; s/[\\n]\\($falsepos\\|[^\\n]*$blobfast\\).*//; @@ -2288,9 +2366,15 @@ $v:print_blobs x; b print_blobs_delete_to_eol; } -h; i\\ ::: $file ::: +: print_blobs_output_false_positive; +/[^\\n]*[/][*](DEBLOB-[\\n]BED)[*][/]/ { + P; + s,^[^\\n]*[\\n],, + b print_blobs_output_false_positive; +} +h; s/^\\([^\\n]*\\($bloblong[^\\n]*\\)\\+\\)\\([\\n].*\\)\\?$/\\1/; $v:narrowed to blob p; @@ -2310,6 +2394,7 @@ $v:print_marked_blobs # This is tricky. We don't want to print the false positive. /^$falsepos[^\\n]*$blobfast/ { $v:delete false positive immediately followed by blob + s/^\\($falsepos\\)/\\1\/*(DEBLOB-\\nBED)*\//; h; s/^\\($falsepos\\).*/\\1/; $v:matched false positive @@ -2324,10 +2409,12 @@ $v:print_marked_blobs G; b print_marked_blobs_delete_to_eol; } - s/^falsepos//; - b print_marked_blobs_delete_to_eol; + /^$falsepos[/][*](DEBLOB-\\nBED)[*][/]/! { + s/^falsepos//; + b print_marked_blobs_delete_to_eol; + } } -/^[^\\n]*$blobfast/! { +/^\([^\\n]\|[/][*](DEBLOB-\\nBED)[*][/]\)*$blobfast/! { $v:delete non-blob header h; s/[\\n]\\($falsepos\\|[^\\n]*$blobfast\\).*//; @@ -2343,9 +2430,15 @@ $v:print_marked_blobs x; b print_marked_blobs_delete_to_eol; } -h; i\\ ::: $file ::: +: print_marked_blobs_output_false_positive; +/[^\\n]*[/][*](DEBLOB-[\\n]BED)[*][/]/ { + P; + s,^[^\\n]*[\\n],, + b print_marked_blobs_output_false_positive; +} +h; s/^\\([^\\n]*\\($bloblong[^\\n]*\\)\\+\\)\\([\\n].*\\)\\?$/\\1/; $v:narrowed to blob s/{\\($sepx\\)\\?$blobfseq\\($sepx\\)\\?}[ ]*;/{\/*(DEBLOBBED)*\/};/g; @@ -2367,6 +2460,7 @@ $v:print_cblobs # This is tricky. We don't want to print the false positive. /^$falsepos[^\\n]*$blobfast/ { $v:delete false positive immediately followed by blob + s/^\\($falsepos\\)/\\1\/*(DEBLOB-\\nBED)*\//; h; s/^\\($falsepos\\).*/\\1/; $v:matched false positive @@ -2381,8 +2475,10 @@ $v:print_cblobs G; b print_cblobs_delete_to_eol; } - s/^$falsepos//; - b print_cblobs_delete_to_eol; + /^$falsepos[/][*](DEBLOB-\\nBED)[*][/]/! { + s/^$falsepos//; + b print_cblobs_delete_to_eol; + } } /^$lblobctx/! { $v:delete non-blob header @@ -2400,9 +2496,15 @@ $v:print_cblobs x; b print_cblobs_delete_to_eol; } -h; i\\ ::: $file ::: +: print_cblobs_output_false_positive; +/[^\\n]*[/][*](DEBLOB-[\\n]BED)[*][/]/ { + P; + s,^[^\\n]*[\\n],, + b print_cblobs_output_false_positive; +} +h; s/^\\($lblobctx[^\\n]*\\($bloblong[^\\n]*\\)*\\)\\([\\n].*\\)\\?$/\\1/; $v:narrowed to blob p; @@ -2422,6 +2524,7 @@ $v:print_marked_cblobs # This is tricky. We don't want to print the false positive. /^$falsepos[^\\n]*$blobfast/ { $v:delete false positive immediately followed by blob + s/^\\($falsepos\\)/\\1\/*(DEBLOB-\\nBED)*\//; h; s/^\\($falsepos\\).*/\\1/; $v:matched false positive @@ -2436,8 +2539,10 @@ $v:print_marked_cblobs G; b print_marked_cblobs_delete_to_eol; } - s/^$falsepos//; - b print_marked_cblobs_delete_to_eol; + /^$falsepos[/][*](DEBLOB-\\nBED)[*][/]/! { + s/^$falsepos//; + b print_marked_cblobs_delete_to_eol; + } } /^$lblobctx/! { $v:delete non-blob header @@ -2455,9 +2560,15 @@ $v:print_marked_cblobs x; b print_marked_cblobs_delete_to_eol; } -h; i\\ ::: $file ::: +: print_marked_cblobs_output_false_positive; +/[^\\n]*[/][*](DEBLOB-[\\n]BED)[*][/]/ { + P; + s,^[^\\n]*[\\n],, + b print_marked_cblobs_output_false_positive; +} +h; s/^\\($lblobctx[^\\n]*\\($bloblong[^\\n]*\\)*\\)\\([\\n].*\\)\\?$/\\1/; $v:narrowed to blob s/{\\($sepx\\)\\?$blobfseq\\($sepx\\)\\?}[ ]*;/{\/*(DEBLOBBED)*\/};/g; @@ -2547,8 +2658,9 @@ $v:list_blobs # This is tricky. We don't want to deblob the false positive. /^$falsepos[^\\n]*$blobfast/ { $v:print false positive immediately followed by blob + s/^\\($falsepos\\)/\\1\/*(DEBLOB-\\nBED)*\//; h; - s/^\\($falsepos\\)[^\\n]*$blobfast.*/\\1/; + s/^\\($falsepos\\).*/\\1/; : list_blobs_match_loop /[\\n]/ { P; @@ -2655,7 +2767,7 @@ check () { # falsepos matches to files that match it. addx () { if test -n "$1"; then - echo -n "\\|$1" >> $falsepos_name + $echo_n "\\|$1" >> $falsepos_name fi } @@ -2664,7 +2776,7 @@ check () { # the falseneg matches to files that match it. badx () { if test -n "$1"; then - echo -n "\\|$1" >> $falseneg_name + $echo_n "\\|$1" >> $falseneg_name fi } @@ -2732,17 +2844,30 @@ check () { esac # Then run through the selected action. - if test "$rm" != "rm -f" || test ! `echo "$sedmain" | wc -c` -lt 1024; then + if test "$rm" != "rm -f" || test ! `$echo "$sedmain" | wc -c` -lt 1024; then scriptname=`mktemp -t deblob-check-sedmain-XXXXXX` tempfiles="$tempfiles $scriptname" - echo "$sedmain" > $scriptname + $echo "$sedmain" > $scriptname cmd="sed -n -f \"$scriptname\"" else cmd='sed -n "$sedmain"' fi set "$@" "$cmd" - test $# != 1 || set "$@" "cat" + sedunbreak=' +: restart; +/[/][*](DEBLOB-$/ { + N; + /[/][*](DEBLOB-[\n]ERROR)[*][/]/{q 1;} + s,[/][*](DEBLOB-[\n]BED)[*][/],, + b restart; +} +p +' + cmd='sed -n "$sedunbreak"' + set "$@" "$cmd" + + # test $# = 1 || set "$@" "cat" shift # fnord goes out here