mtd: allow writing Seama files to "firmware" on Broadcom targets
authorrmilecki <rmilecki@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Thu, 28 Jan 2016 22:38:30 +0000 (22:38 +0000)
committerrmilecki <rmilecki@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Thu, 28 Jan 2016 22:38:30 +0000 (22:38 +0000)
Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@48534 3c298f89-4303-0410-b956-a3cf2f4a3e73

package/system/mtd/src/trx.c

index 245ee76..5763917 100644 (file)
@@ -44,6 +44,8 @@ struct trx_header {
        uint32_t offsets[3];    /* Offsets of partitions from start of header */
 };
 
        uint32_t offsets[3];    /* Offsets of partitions from start of header */
 };
 
+#define SEAMA_MAGIC    0x17a4a35e
+
 #if __BYTE_ORDER == __BIG_ENDIAN
 #define STORE32_LE(X)           ((((X) & 0x000000FF) << 24) | (((X) & 0x0000FF00) << 8) | (((X) & 0x00FF0000) >> 8) | (((X) & 0xFF000000) >> 24))
 #elif __BYTE_ORDER == __LITTLE_ENDIAN
 #if __BYTE_ORDER == __BIG_ENDIAN
 #define STORE32_LE(X)           ((((X) & 0x000000FF) << 24) | (((X) & 0x0000FF00) << 8) | (((X) & 0x00FF0000) >> 8) | (((X) & 0xFF000000) >> 24))
 #elif __BYTE_ORDER == __LITTLE_ENDIAN
@@ -118,6 +120,10 @@ trx_check(int imagefd, const char *mtd, char *buf, int *len)
                return 0;
        }
 
                return 0;
        }
 
+       /* Allow writing Seama files to firmware without an extra validation */
+       if (trx->magic == SEAMA_MAGIC)
+               return 1;
+
        if (trx->magic != TRX_MAGIC || trx->len < sizeof(struct trx_header)) {
                if (quiet < 2) {
                        fprintf(stderr, "Bad trx header\n");
        if (trx->magic != TRX_MAGIC || trx->len < sizeof(struct trx_header)) {
                if (quiet < 2) {
                        fprintf(stderr, "Bad trx header\n");