aboutsummaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* AR8216: complement MIB counters with info in GiB / MiB / KiBJohn Crispin2016-03-041-5/+40
| | | | | | | | | | The decimal values especially for TxByte and RxGoodByte are hard to read once bigger amounts of data have been transferred. Therefore complement the decimal values with info in GiB / MiB / KiB. Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com> SVN-Revision: 48911
* AR8216: don't display MIB counters if all are emptyJohn Crispin2016-03-041-1/+8
| | | | | | | | | | | | For unused switch ports all MIB values are zero. Displaying ~40 empty MIB counters is just confusing and makes it hard to read the output of swconfig dev <dev> show. Therefore, if all MIB counters for a port are zero, just display an info that the MIB counters are empty. Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com> SVN-Revision: 48910
* imx6: image: Add missing kernel prefixJohn Crispin2016-03-041-0/+1
| | | | | | Signed-off-by: Petr Štetiar <ynezz@true.cz> SVN-Revision: 48909
* ramips: mt7621: fix WF-2881 for ubi splitJohn Crispin2016-03-042-14/+5
| | | | | | | | This patch fix firmware split for WF-2881 which was previously manually partitioned. Signed-off-by: YounJae Rho <luxflow@live.com> SVN-Revision: 48908
* lua: host: install lnum_config.hJohn Crispin2016-03-041-0/+11
| | | | | | | | | | | One of the host patches introduces the new header file lnum_config.h included by luaconf.h, but doesn't install it. Install it to allow building C modules for the host Lua. Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net> SVN-Revision: 48907
* ramips: Add profiles for JCG routersJohn Crispin2016-03-042-0/+60
| | | | | | | | | | This patch adds profiles and support for building factory and sysupgrade images for JHR-N805R, JHR-N825R and JHR-N926R. Signed-off-by: Reinhard Max <reinhard@m4x.de> Reviewed-by: Torsten Duwe <duwe@lst.de> SVN-Revision: 48906
* ramips: Add JCG routers to base-filesJohn Crispin2016-03-044-0/+18
| | | | | | | | | | This patch adds support for JHR-N805R, JHR-N825R and JHR-N926R to various scripts in the base-files directory. Signed-off-by: Reinhard Max <reinhard@m4x.de> Reviewed-by: Torsten Duwe <duwe@lst.de> SVN-Revision: 48905
* ramips: Add device tree for JCG JHR-N926RJohn Crispin2016-03-041-0/+127
| | | | | | | | | | | | | | | | Add a device tree for JCG JHR-N825R This router is based on a RT3052 and has 4MB of CFI flash and 32MB of SDRAM. As a special feature, it comes with a two digit seven segment display that is connected to a pair of daisy-chained 74164 shift registers that can be controlled via GPIOs. For details, see https://wikidevi.com/wiki/JCG_JHR-N825R . Signed-off-by: Reinhard Max <reinhard@m4x.de> Reviewed-by: Torsten Duwe <duwe@lst.de> SVN-Revision: 48904
* ramips: Add device tree for JCG JHR-N825RJohn Crispin2016-03-041-0/+81
| | | | | | | | | | | | Add a device tree for JCG JHR-N825R This router is based on a RT3052 and has 4MB of CFI flash and 32MB of SDRAM. For details, see https://wikidevi.com/wiki/JCG_JHR-N825R . Signed-off-by: Reinhard Max <reinhard@m4x.de> Reviewed-by: Torsten Duwe <duwe@lst.de> SVN-Revision: 48903
* ramips: Add device tree for JCG JHR-N805RJohn Crispin2016-03-041-0/+89
| | | | | | | | | | | | Add a device tree for JCG JHR-N805R This router is based on a RT3050 and has 4MB of SPI flash and 16MB of SDRAM. For details, see https://wikidevi.com/wiki/JCG_JHR-N805R . Signed-off-by: Reinhard Max <reinhard@m4x.de> Reviewed-by: Torsten Duwe <duwe@lst.de> SVN-Revision: 48902
* ramips: Add a tool to create JCG factory imagesJohn Crispin2016-03-041-209/+220
| | | | | | | | replace spaces with tabs Signed-off-by: Reinhard Max <reinhard@m4x.de> SVN-Revision: 48901
* mac80211: improve rate control performanceFelix Fietkau2016-03-031-0/+77
| | | | | | Signed-off-by: Felix Fietkau <nbd@openwrt.org> SVN-Revision: 48897
* mt76: update to the latest version, adds stability fixesFelix Fietkau2016-03-031-2/+2
| | | | | | Signed-off-by: Felix Fietkau <nbd@openwrt.org> SVN-Revision: 48895
* kernel: gpio-button-hotplug: Add missing ONESHOT flag to threaded IRQ requestJohn Crispin2016-03-032-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | Without the IRQF_ONESHOT flag in devm_request_threaded_irq() call I get following error: genirq: Threaded irq requested with handler=NULL and !ONESHOT for irq 56 gpio-keys gpio-keys: failed to request irq:56 for gpio:20 >From kernel/irq/manage.c: The interrupt was requested with handler = NULL, so we use the default primary handler for it. But it does not have the oneshot flag set. In combination with level interrupts this is deadly, because the default primary handler just wakes the thread, then the irq lines is reenabled, but the device still has the level irq asserted. Rinse and repeat.... While this works for edge type interrupts, we play it safe and reject unconditionally because we can't say for sure which type this interrupt really has. The type flags are unreliable as the underlying chip implementation can override them. Signed-off-by: Petr Štetiar <ynezz@true.cz> SVN-Revision: 48894
* ramips: Incorrect file mode changeJohn Crispin2016-03-034-0/+0
| | | | | | | | | | | Commit d0f5ab6d95a1 ("ramips: Added support for ZBT-826 / ZBT-1026") incorrectly changed the mode of the ramips shell scripts from 755 to 644. I.e., they are not excutable any more and for example devices will be left with broken configs. Signed-off-by: Kristian Evensen <kristian.evensen@gmail.com> SVN-Revision: 48893
* target/mpc85xx: check for 'generic' subtarget for initramfs image fileJohn Crispin2016-03-031-0/+2
| | | | | | | | | | | | | Copy 'cuImage.tl-wdr4900-v1-initramfs' only for the 'generic' subtarget. This is a follow-up to: http://git.openwrt.org/?p=openwrt.git;a=commitdiff;h=b889fe55c1844aec2c03da28fecb03e958c21f18 We build our initramfs images more rarely, so it took a while to catch this too. Signed-off-by: Alexandru Ardelean <ardeleanalex@gmail.com> SVN-Revision: 48892
* mtd: fix reading of image magic bytes in smaller chunksJohn Crispin2016-03-031-5/+12
| | | | | | | | | | | | | | | The image_check currently fails when it cannot read all magic bytes in a single chunk. But this can happen when the data are read from a pipe. This currently breaks the openmesh.sh upgrade script with musl because it uses dd with a blocksize of 1 to copy the image file to the mtd process. The read can simply be repeated until enough bytes are read for the magic byte check. It only stops when either an error was returned or 0 bytes were read. Signed-off-by: Sven Eckelmann <sven.eckelmann@open-mesh.com> SVN-Revision: 48891
* om-watchdog: Move each board name to its own lineJohn Crispin2016-03-031-4/+10
| | | | | | Signed-off-by: Sven Eckelmann <sven.eckelmann@open-mesh.com> SVN-Revision: 48890
* om-watchdog: Stop om-watchdog via procd before rebootingJohn Crispin2016-03-031-8/+24
| | | | | | | | | | | | | | | | It was noticed that the system can hang during the reboot before the kernel actually triggers the system reset and before all processes are stopped. The watchdog didn't automatically restart the system because the om-watchdog process was still running and triggering the hardware watchdog. Instead the system should stop the watchdog during the shutdown to get the benefit of an hardware reset in case of an software related problem. This stop can be done quite easily with procd because it keeps track of its started processes. Signed-off-by: Sven Eckelmann <sven.eckelmann@open-mesh.com> SVN-Revision: 48889
* ramips: Add a tool to create JCG factory imagesJohn Crispin2016-03-032-0/+393
| | | | | | | | | | This tool creates factory images for JCG routers. Details can be found in the header comment of jcgimage.c. Signed-off-by: Reinhard Max <reinhard@m4x.de> Reviewed-by: Torsten Duwe <duwe@lst.de> SVN-Revision: 48888
* ramips: enable mt76 on mt7688 by defaultFelix Fietkau2016-03-022-0/+4
| | | | | | Signed-off-by: Felix Fietkau <nbd@openwrt.org> SVN-Revision: 48886
* mt76: update to the latest version, adds basic mt7628 supportFelix Fietkau2016-03-021-2/+6
| | | | | | Signed-off-by: Felix Fietkau <nbd@openwrt.org> SVN-Revision: 48885
* mac80211: add a number of pending fixesFelix Fietkau2016-03-025-0/+180
| | | | | | Signed-off-by: Felix Fietkau <nbd@openwrt.org> SVN-Revision: 48883
* mac80211: refresh patchFelix Fietkau2016-03-021-2/+2
| | | | | | Signed-off-by: Felix Fietkau <nbd@openwrt.org> SVN-Revision: 48882
* mac80211: ath9k: enable access to GPIOFelix Fietkau2016-03-021-0/+243
| | | | | | | | | | Enable access to GPIO chip and its pins for Atheros AR92xx wireless devices. For now AR9285 and AR9287 are supported. Signed-off-by: Michal Cieslakiewicz <michal.cieslakiewicz@wp.pl> Acked-by: Hartmut Knaack <knaack.h@gmx.de> SVN-Revision: 48881
* mac80211: ath9k: set default state for platform LEDsFelix Fietkau2016-03-021-0/+29
| | | | | | | | | | Support default state for platform LEDs connected to ath9k device. Now LEDs are correctly set on or off at ath9k module initialization. Signed-off-by: Michal Cieslakiewicz <michal.cieslakiewicz@wp.pl> Acked-by: Hartmut Knaack <knaack.h@gmx.de> SVN-Revision: 48880
* mac80211: ath9k: enable platform WLAN LED nameFelix Fietkau2016-03-024-0/+64
| | | | | | | | | Enable platform-supplied WLAN LED name for ath9k device. Signed-off-by: Michal Cieslakiewicz <michal.cieslakiewicz@wp.pl> Acked-by: Hartmut Knaack <knaack.h@gmx.de> SVN-Revision: 48879
* cyassl: disable Intel ASM for nowJo-Philipp Wich2016-03-021-8/+8
| | | | | | | | With ASM support enabled, CyaSSL fails to build on all x86 subtargets. Signed-off-by: Jo-Philipp Wich <jow@openwrt.org> SVN-Revision: 48876
* kernel: update kernel 3.18 to version 3.18.27Hauke Mehrtens2016-03-016-7/+7
| | | | | | Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> SVN-Revision: 48874
* openssl: update to 1.0.2g (8 CVEs)Jo-Philipp Wich2016-03-014-15/+15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | CVE-2016-0704 s2_srvr.c overwrite the wrong bytes in the master-key when applying Bleichenbacher protection for export cipher suites. This provides a Bleichenbacher oracle, and could potentially allow more efficient variants of the DROWN attack. CVE-2016-0703 s2_srvr.c did not enforce that clear-key-length is 0 for non-export ciphers. If clear-key bytes are present for these ciphers, they *displace* encrypted-key bytes. This leads to an efficient divide-and-conquer key recovery attack: if an eavesdropper has intercepted an SSLv2 handshake, they can use the server as an oracle to determine the SSLv2 master-key, using only 16 connections to the server and negligible computation. More importantly, this leads to a more efficient version of DROWN that is effective against non-export ciphersuites, and requires no significant computation. CVE-2016-0702 A side-channel attack was found which makes use of cache-bank conflicts on the Intel Sandy-Bridge microarchitecture which could lead to the recovery of RSA keys. The ability to exploit this issue is limited as it relies on an attacker who has control of code in a thread running on the same hyper- threaded core as the victim thread which is performing decryptions. CVE-2016-0799 The internal |fmtstr| function used in processing a "%s" format string in the BIO_*printf functions could overflow while calculating the length of a string and cause an OOB read when printing very long strings. Additionally the internal |doapr_outch| function can attempt to write to an OOB memory location (at an offset from the NULL pointer) in the event of a memory allocation failure. In 1.0.2 and below this could be caused where the size of a buffer to be allocated is greater than INT_MAX. E.g. this could be in processing a very long "%s" format string. Memory leaks can also occur. The first issue may mask the second issue dependent on compiler behaviour. These problems could enable attacks where large amounts of untrusted data is passed to the BIO_*printf functions. If applications use these functions in this way then they could be vulnerable. OpenSSL itself uses these functions when printing out human-readable dumps of ASN.1 data. Therefore applications that print this data could be vulnerable if the data is from untrusted sources. OpenSSL command line applications could also be vulnerable where they print out ASN.1 data, or if untrusted data is passed as command line arguments. Libssl is not considered directly vulnerable. Additionally certificates etc received via remote connections via libssl are also unlikely to be able to trigger these issues because of message size limits enforced within libssl. CVE-2016-0797 In the BN_hex2bn function the number of hex digits is calculated using an int value |i|. Later |bn_expand| is called with a value of |i * 4|. For large values of |i| this can result in |bn_expand| not allocating any memory because |i * 4| is negative. This can leave the internal BIGNUM data field as NULL leading to a subsequent NULL ptr deref. For very large values of |i|, the calculation |i * 4| could be a positive value smaller than |i|. In this case memory is allocated to the internal BIGNUM data field, but it is insufficiently sized leading to heap corruption. A similar issue exists in BN_dec2bn. This could have security consequences if BN_hex2bn/BN_dec2bn is ever called by user applications with very large untrusted hex/dec data. This is anticipated to be a rare occurrence. All OpenSSL internal usage of these functions use data that is not expected to be untrusted, e.g. config file data or application command line arguments. If user developed applications generate config file data based on untrusted data then it is possible that this could also lead to security consequences. This is also anticipated to be rare. CVE-2016-0798 The SRP user database lookup method SRP_VBASE_get_by_user had confusing memory management semantics; the returned pointer was sometimes newly allocated, and sometimes owned by the callee. The calling code has no way of distinguishing these two cases. Specifically, SRP servers that configure a secret seed to hide valid login information are vulnerable to a memory leak: an attacker connecting with an invalid username can cause a memory leak of around 300 bytes per connection. Servers that do not configure SRP, or configure SRP but do not configure a seed are not vulnerable. In Apache, the seed directive is known as SSLSRPUnknownUserSeed. To mitigate the memory leak, the seed handling in SRP_VBASE_get_by_user is now disabled even if the user has configured a seed. Applications are advised to migrate to SRP_VBASE_get1_by_user. However, note that OpenSSL makes no strong guarantees about the indistinguishability of valid and invalid logins. In particular, computations are currently not carried out in constant time. CVE-2016-0705 A double free bug was discovered when OpenSSL parses malformed DSA private keys and could lead to a DoS attack or memory corruption for applications that receive DSA private keys from untrusted sources. This scenario is considered rare. CVE-2016-0800 A cross-protocol attack was discovered that could lead to decryption of TLS sessions by using a server supporting SSLv2 and EXPORT cipher suites as a Bleichenbacher RSA padding oracle. Note that traffic between clients and non- vulnerable servers can be decrypted provided another server supporting SSLv2 and EXPORT ciphers (even with a different protocol such as SMTP, IMAP or POP) shares the RSA keys of the non-vulnerable server. This vulnerability is known as DROWN (CVE-2016-0800). Recovering one session key requires the attacker to perform approximately 2^50 computation, as well as thousands of connections to the affected server. A more efficient variant of the DROWN attack exists against unpatched OpenSSL servers using versions that predate 1.0.2a, 1.0.1m, 1.0.0r and 0.9.8zf released on 19/Mar/2015 (see CVE-2016-0703 below). Users can avoid this issue by disabling the SSLv2 protocol in all their SSL/TLS servers, if they've not done so already. Disabling all SSLv2 ciphers is also sufficient, provided the patches for CVE-2015-3197 (fixed in OpenSSL 1.0.1r and 1.0.2f) have been deployed. Servers that have not disabled the SSLv2 protocol, and are not patched for CVE-2015-3197 are vulnerable to DROWN even if all SSLv2 ciphers are nominally disabled, because malicious clients can force the use of SSLv2 with EXPORT ciphers. OpenSSL 1.0.2g and 1.0.1s deploy the following mitigation against DROWN: SSLv2 is now by default disabled at build-time. Builds that are not configured with "enable-ssl2" will not support SSLv2. Even if "enable-ssl2" is used, users who want to negotiate SSLv2 via the version-flexible SSLv23_method() will need to explicitly call either of: SSL_CTX_clear_options(ctx, SSL_OP_NO_SSLv2); or SSL_clear_options(ssl, SSL_OP_NO_SSLv2); as appropriate. Even if either of those is used, or the application explicitly uses the version-specific SSLv2_method() or its client or server variants, SSLv2 ciphers vulnerable to exhaustive search key recovery have been removed. Specifically, the SSLv2 40-bit EXPORT ciphers, and SSLv2 56-bit DES are no longer available. In addition, weak ciphers in SSLv3 and up are now disabled in default builds of OpenSSL. Builds that are not configured with "enable-weak-ssl-ciphers" will not provide any "EXPORT" or "LOW" strength ciphers. Signed-off-by: Jo-Philipp Wich <jow@openwrt.org> SVN-Revision: 48868
* opkg: Make opkg understand old md5John Crispin2016-03-012-21/+69
| | | | | | | | | | Opkg now uses sha256 by default and expects them. Making it optionally understand md5s also and detect md5 sum so we can migrate from configuration that used md5. Signed-off-by: Michal Hrusecky <Michal.Hrusecky@nic.cz> SVN-Revision: 48867
* ar71xx: Add OOLITE to the Gainstrong profile, removed standalone profile.John Crispin2016-03-012-18/+11
| | | | | | | | | This patch moves the OOLITE profile code into the overarching Gainstrong profile and deletes the old single profile file. Signed-off by: Stijn Segers <francesco.borromini@inventati.org> SVN-Revision: 48866
* ramips: Added support for ZBT-826 / ZBT-1026John Crispin2016-03-017-0/+155
| | | | | | | | | Support for these MT7620-based routers: https://wiki.openwrt.org/toh/zbt/we-826 Based on Oskari’s patches found here: https://dev.openwrt.org/ticket/19996 Signed-off-by: Jamie Stuart <jamie@onebillion.org> SVN-Revision: 48865
* buildroot: improve git submodule handling for packagesFelix Fietkau2016-02-292-4/+5
| | | | | | | | | | | | | | | | | | | Move the `--recursive` switch from `git clone` to `git submodule` so that submodules are cloned for upstream branches where the PKG_SOURCE_VERSION commit-ish has a different .gitmodules configuration than the repository default. This is, for example, required when the master branch for a source package does not use submodules, but its topic branch for OpenWRT does. This changes the buildroot dependency from git-1.6.2 to git 1.7.12.2, which was released September 2012. Signed-off-by: Darik Horn <dajhorn@vanadac.com> Signed-off-by: Karl Palsson <karlp@tweak.net.au> SVN-Revision: 48830
* firmware-utils: mkfwimage: fix firmware_max_length for XM layoutFelix Fietkau2016-02-291-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The new u-boot version bundled with the 5.6.x firmwares from Ubiquiti gets confused by the smaller rootfs partition size; this can lead to various issues: 1. We've gotten reports that flashing from the 5.6.x stock firmware to OpenWrt will brick devices; I wasn't able to reproduce this myself 2. Flashing from 5.5.x stock firmware to OpenWrt and back to stock (via TFTP recovery), following by an update to 5.6.x via web interface can yield a bricked device with the following properties: - It can't be booted without entering commands over a serial console, as u-boot supplies the wrong MTD layout - The web interface won't accept any image with the original flash layout, so stock firmware upgrades are impossible - As the TFTP recovery doesn't update u-boot, returning to the old u-boot from firmware 5.5.x is impossible To recover from 2., creating an OpenWrt image which doesn't set u-boot as read-only and flashing a backup of the old u-boot from there is the only way known to me. (Fixing the mtdparts variable in u-boot-env from OpenWrt might also work; settings this from u-boot over serial didn't have any permanent effect.) Fix all of this by setting the correct flash layout also used by the stock firmware. Flashing has been tested from both firmware 5.5.x and 5.6.x. The fixed layout also matches the mtdparts defined by OpenWrt. Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net> SVN-Revision: 48829
* ar71xx, firmware-utils: split ubdev01 flash layout from XMFelix Fietkau2016-02-292-1/+7
| | | | | | | | | The ubdev01 profile defines its own MTDPARTS with smaller firmware partition, so give it its own UBNT_BOARD in mkfwimage. Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net> SVN-Revision: 48828
* firmware-utils: mkfwimage: add -Wall, fix obvious bugs causing compile warningsFelix Fietkau2016-02-292-8/+6
| | | | | | Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net> SVN-Revision: 48827
* gcc: update gcc 5 to version 5.3.0Felix Fietkau2016-02-2939-65/+30
| | | | | | Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> SVN-Revision: 48826
* mt76: update to the latest version, adds a number of stability fixesFelix Fietkau2016-02-281-1/+1
| | | | | | Signed-off-by: Felix Fietkau <nbd@openwrt.org> SVN-Revision: 48814
* ramips: add sysupgrade support for mt7628Felix Fietkau2016-02-281-0/+1
| | | | | | Signed-off-by: Felix Fietkau <nbd@openwrt.org> SVN-Revision: 48813
* ramips: create device tree node for MT7628 WMAC in preparation for future ↵Felix Fietkau2016-02-282-0/+17
| | | | | | | | work on driver support in mt76 Signed-off-by: Felix Fietkau <nbd@openwrt.org> SVN-Revision: 48812
* mt76: update to the latest version, enable MT7603 support (very basic, needs ↵Felix Fietkau2016-02-281-5/+8
| | | | | | | | testing and debugging work) Signed-off-by: Felix Fietkau <nbd@openwrt.org> SVN-Revision: 48811
* bsdiff: add bsdiff and bspatch tool packageHauke Mehrtens2016-02-272-0/+162
| | | | | | | | | This will be used to create a diff between the Lantiq annex A and the annex B firmware. Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> SVN-Revision: 48810
* scripts/download.pl: fix sha256 hash command (#21931)Felix Fietkau2016-02-271-1/+1
| | | | | | Signed-off-by: Felix Fietkau <nbd@openwrt.org> SVN-Revision: 48809
* Revert "ar71xx: WNR612v2: exclude USB modules from image"Felix Fietkau2016-02-261-1/+0
| | | | | | | | This reverts commit r48778. The issue has now been fixed properly Signed-off-by: Felix Fietkau <nbd@openwrt.org> SVN-Revision: 48808
* include/target.mk: fix profile defaultsFelix Fietkau2016-02-261-2/+2
| | | | | | Signed-off-by: Felix Fietkau <nbd@openwrt.org> SVN-Revision: 48807
* base-files: support passing mode to ucidef_set_led_netdev()Jo-Philipp Wich2016-02-263-4/+6
| | | | | | Signed-off-by: Jo-Philipp Wich <jow@openwrt.org> SVN-Revision: 48806
* kernel: use upstream accepted bcm47xxpart patchesRafał Miłecki2016-02-262-3/+6
| | | | | | Signed-off-by: Rafał Miłecki <zajec5@gmail.com> SVN-Revision: 48805
* toolchain: use musl instead of glibc by default for mips64Felix Fietkau2016-02-261-4/+3
| | | | | | Signed-off-by: Felix Fietkau <nbd@openwrt.org> SVN-Revision: 48804
* musl: add mips64 portFelix Fietkau2016-02-261-0/+2714
| | | | | | Signed-off-by: Felix Fietkau <nbd@openwrt.org> SVN-Revision: 48803