git-am from git-1.1.6 refuses to apply the following two patches, whereas patch(1) sees nothing wrong with them...
The error messages look like:
: smyrno 46 ; git-am /tmp/\[klibc]\ Add\ swap\ support\ to\ fstype,\ second\ version.eml
Applying 'Add swap support to fstype, second version'
error: patch fragment without header at line 4: @@ -7,7 +7,7 @@ error: patch fragment without header at line 13: @@ -20,6 +20,7 @@ error: patch fragment without header at line 21: @@ -49,6 +50,9 @@ error: patch fragment without header at line 31: @@ -182,6 +186,19 @@ error: patch fragment without header at line 50: @@ -189,17 +206,18 @@ error: patch fragment without header at line 83: @@ -0,0 +1,18 @@ fatal: No changes Patch failed at 0001.
The patches are meant to be apply to the top of:
git://git.kernel.org/pub/scm/libs/klibc/klibc.git
HEAD = ea6af2b08cb18ba60e55c5e8f0f65ddac1672ca0
-hpa
The attached patch adds support for detecting LUKS partitions (Linux Unified Key Setup - http://luks.endorphin.org/) to fstype. This makes it easier to automatically detect and activate encrypted (root) partitions from an initramfs image.
The patch is now against klibc's git tree instead of klibc-1.2.
Signed-off-by: David Härdeman <david@2gen.com>
--
fstype.c | 17 ++++++++++++++++- luks_fs.h | 45 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+), 1 deletion(-)
Index: klibc/usr/kinit/fstype/fstype.c =================================================================== --- klibc.orig/usr/kinit/fstype/fstype.c 2006-02-05 10:53:51.000000000 +0100 +++ klibc/usr/kinit/fstype/fstype.c 2006-02-05 11:09:31.000000000 +0100 @@ -7,7 +7,7 @@ * FSSIZE - filesystem size (if known) * * We currently detect (in order): - * gzip, cramfs, romfs, xfs, minix, ext3, ext2, reiserfs, jfs + * gzip, cramfs, romfs, xfs, luks, minix, ext3, ext2, reiserfs, jfs * * MINIX, ext3 and Reiserfs bits are currently untested. */ @@ -29,6 +29,7 @@ #include "ext2_fs.h" #include "ext3_fs.h" #include "xfs_sb.h" +#include "luks_fs.h" /* * Slightly cleaned up version of jfs_superblock to @@ -168,6 +169,19 @@ return 0; } +static int luks_image(const unsigned char *buf, unsigned long long *blocks) +{ + const struct luks_partition_header *lph = + (const struct luks_partition_header *)buf; + + if (!memcmp(lph->magic, LUKS_MAGIC, LUKS_MAGIC_L)) { + /* FSSIZE is dictated by the underlying fs, not by LUKS */ + *blocks = 0; + return 1; + } + return 0; +} + struct imagetype { off_t block; const char name[12]; @@ -179,6 +193,7 @@ { 0, "cramfs", cramfs_image }, { 0, "romfs", romfs_image }, { 0, "xfs", xfs_image }, + { 0, "luks", luks_image }, { 1, "minix", minix_image }, { 1, "ext3", ext3_image }, { 1, "ext2", ext2_image }, Index: klibc/usr/kinit/fstype/luks_fs.h =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ klibc/usr/kinit/fstype/luks_fs.h 2006-02-05 10:57:52.000000000 +0100 @@ -0,0 +1,45 @@ +#ifndef __LINUX_LUKS_FS_H +#define __LINUX_LUKS_FS_H + +/* The basic structures of the luks partition header */ +#define LUKS_MAGIC_L 6 +#define LUKS_CIPHERNAME_L 32 +#define LUKS_CIPHERMODE_L 32 +#define LUKS_HASHSPEC_L 32 +#define LUKS_UUID_STRING_L 40 + +#define LUKS_MAGIC "LUKS\xBA\xBE" +#define LUKS_DIGESTSIZE 20 +#define LUKS_SALTSIZE 32 +#define LUKS_NUMKEYS 8 +#define LUKS_MKD_ITER 10 +#define LUKS_KEY_DISABLED 0x0000DEAD +#define LUKS_KEY_ENABLED 0x00AC71F3 +#define LUKS_STRIPES 4000 + + +/* On-disk "super block" */ +struct luks_partition_header { + char magic[LUKS_MAGIC_L]; + __be16 version; + char cipherName[LUKS_CIPHERNAME_L]; + char cipherMode[LUKS_CIPHERMODE_L]; + char hashSpec[LUKS_HASHSPEC_L]; + __be32 payloadOffset; + __be32 keyBytes; + char mkDigest[LUKS_DIGESTSIZE]; + char mkDigestSalt[LUKS_SALTSIZE]; + __be32 mkDigestIterations; + char uuid[LUKS_UUID_STRING_L]; + + struct { + __be32 active; + /* Parameters for PBKDF2 processing */ + __be32 passwordIterations; + char passwordSalt[LUKS_SALTSIZE]; + __be32 keyMaterialOffset; + __be32 stripes; + } keyblock[LUKS_NUMKEYS]; +}; + +#endif _______________________________________________ klibc mailing list klibc@zytor.com http://www.zytor.com/mailman/listinfo/klibc This patch adds support for swap detection to fstype (to be applied on top of the previous luks patch). The patch is now against klibc's git tree instead of klibc-1.2. Signed-off-by: David Härdeman <david@2gen.com>
--
fstype.c | 42 ++++++++++++++++++++++++++++++------------
swap_fs.h | 18 ++++++++++++++++++
2 files changed, 48 insertions(+), 12 deletions(-)
Index: klibc/usr/kinit/fstype/fstype.c
===================================================================
--- klibc.orig/usr/kinit/fstype/fstype.c 2006-02-05 11:09:31.000000000 +0100
+++ klibc/usr/kinit/fstype/fstype.c 2006-02-05 11:11:15.000000000 +0100
@@ -7,7 +7,7 @@
* FSSIZE - filesystem size (if known)
*
* We currently detect (in order):
- * gzip, cramfs, romfs, xfs, luks, minix, ext3, ext2, reiserfs, jfs
+ * gzip, cramfs, romfs, xfs, luks, minix, ext3, ext2, reiserfs, jfs, swap
*
* MINIX, ext3 and Reiserfs bits are currently untested.
*/
@@ -20,6 +20,7 @@
#include <endian.h>
#include <netinet/in.h>
#include <sys/vfs.h>
+#include <asm/page.h>
#define cpu_to_be32(x) __cpu_to_be32(x) /* Needed by romfs_fs.h */
@@ -49,6 +50,9 @@
#define BLOCK_SIZE 1024
+/* Swap needs the definition of block size */
+#include "swap_fs.h"
+
static int gzip_image(const unsigned char *buf, unsigned long long *bytes)
{
if (buf[0] == 037 && (buf[1] == 0213 || buf[1] == 0236)) {
@@ -182,6 +186,19 @@
return 0;
}
+static int swap_image(const unsigned char *buf, unsigned long long *blocks)
+{
+ const struct swap_super_block *ssb =
+ (const struct swap_super_block *)buf;
+
+ if (!memcmp(ssb->magic, SWAP_MAGIC_1, SWAP_MAGIC_L) ||
+ !memcmp(ssb->magic, SWAP_MAGIC_2, SWAP_MAGIC_L)) {
+ *blocks = 0;
+ return 1;
+ }
+ return 0;
+}
+
struct imagetype {
off_t block;
const char name[12];
@@ -189,17 +206,18 @@
};
static struct imagetype images[] = {
- { 0, "gzip", gzip_image },
- { 0, "cramfs", cramfs_image },
- { 0, "romfs", romfs_image },
- { 0, "xfs", xfs_image },
- { 0, "luks", luks_image },
- { 1, "minix", minix_image },
- { 1, "ext3", ext3_image },
- { 1, "ext2", ext2_image },
- { 8, "reiserfs", reiserfs_image },
- { 64, "reiserfs", reiserfs_image },
- { 32, "jfs", jfs_image }
+ { 0, "gzip", gzip_image },
+ { 0, "cramfs", cramfs_image },
+ { 0, "romfs", romfs_image },
+ { 0, "xfs", xfs_image },
+ { 0, "luks", luks_image },
+ { 1, "minix", minix_image },
+ { 1, "ext3", ext3_image },
+ { 1, "ext2", ext2_image },
+ { 8, "reiserfs", reiserfs_image },
+ { 64, "reiserfs", reiserfs_image },
+ { 32, "jfs", jfs_image },
+ { SWAP_OFFSET, "swap", swap_image }
};
int identify_fs(int fd, const char **fstype,
Index: klibc/usr/kinit/fstype/swap_fs.h
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ klibc/usr/kinit/fstype/swap_fs.h 2006-02-05 11:10:01.000000000 +0100
@@ -0,0 +1,18 @@
+#ifndef __LINUX_SWAP_FS_H
+#define __LINUX_SWAP_FS_H
+
+/* The basic structures of the swap super block */
+#define SWAP_RESERVED_L BLOCK_SIZE - 10
+#define SWAP_MAGIC_L 10
+#define SWAP_MAGIC_1 "SWAP-SPACE"
+#define SWAP_MAGIC_2 "SWAPSPACE2"
+/* The super block is the last block in the first page */
+#define SWAP_OFFSET ((PAGE_SIZE - BLOCK_SIZE) / BLOCK_SIZE)
+
+/* On-disk "super block" */
+struct swap_super_block {
+ char reserved[SWAP_RESERVED_L];
+ char magic[SWAP_MAGIC_L];
+};
+
+#endif
_______________________________________________
klibc mailing list
klibc@zytor.com
http://www.zytor.com/mailman/listinfo/klibc