* [U-Boot] [PATCH v2 0/5] tools/env: pass arguments as parameters not global structure
@ 2016-04-19 20:43 Andreas Fenkart
2016-04-19 20:43 ` [U-Boot] [PATCH v2 1/5] tools/env: pass key as argument to env_aes_cbc_crypt Andreas Fenkart
` (3 more replies)
0 siblings, 4 replies; 9+ messages in thread
From: Andreas Fenkart @ 2016-04-19 20:43 UTC (permalink / raw)
To: u-boot
u-boot tools can be built as a library (libubootenv.a). Passing arguments
to the library using global structures is a bad interface.
v2:
- fix env_aes_cbc_crypt prototype
- check opts pointer for not NULL
Andreas Fenkart (5):
tools/env: pass key as argument to env_aes_cbc_crypt
tools/env: remove 'extern' from function prototype in fw_env.h
tools/env: fw_printenv pass value_only as argument
tools/env: compute size of usable area only once
tools/env: replace global variables by parameter passing
tools/env/fw_env.c | 111 ++++++++++++++++++++++++++++--------------------
tools/env/fw_env.h | 31 +++++---------
tools/env/fw_env_main.c | 28 +++++++-----
3 files changed, 94 insertions(+), 76 deletions(-)
--
2.8.0.rc3
^ permalink raw reply [flat|nested] 9+ messages in thread
* [U-Boot] [PATCH v2 1/5] tools/env: pass key as argument to env_aes_cbc_crypt
2016-04-19 20:43 [U-Boot] [PATCH v2 0/5] tools/env: pass arguments as parameters not global structure Andreas Fenkart
@ 2016-04-19 20:43 ` Andreas Fenkart
2016-05-30 17:55 ` [U-Boot] [U-Boot, v2, " Tom Rini
2016-04-19 20:43 ` [U-Boot] [PATCH v2 2/5] tools/env: remove 'extern' from function prototype in fw_env.h Andreas Fenkart
` (2 subsequent siblings)
3 siblings, 1 reply; 9+ messages in thread
From: Andreas Fenkart @ 2016-04-19 20:43 UTC (permalink / raw)
To: u-boot
Signed-off-by: Andreas Fenkart <andreas.fenkart@digitalstrom.com>
---
tools/env/fw_env.c | 15 +++++++++------
1 file changed, 9 insertions(+), 6 deletions(-)
diff --git a/tools/env/fw_env.c b/tools/env/fw_env.c
index 1420ac5..e5b2e8f 100644
--- a/tools/env/fw_env.c
+++ b/tools/env/fw_env.c
@@ -106,7 +106,7 @@ static struct environment environment = {
.flag_scheme = FLAG_NONE,
};
-static int env_aes_cbc_crypt(char *data, const int enc);
+static int env_aes_cbc_crypt(char *data, const int enc, uint8_t *key);
static int HaveRedundEnv = 0;
@@ -304,7 +304,8 @@ int fw_env_close(void)
{
int ret;
if (common_args.aes_flag) {
- ret = env_aes_cbc_crypt(environment.data, 1);
+ ret = env_aes_cbc_crypt(environment.data, 1,
+ common_args.aes_key);
if (ret) {
fprintf(stderr,
"Error: can't encrypt env for flash\n");
@@ -949,7 +950,7 @@ static int flash_flag_obsolete (int dev, int fd, off_t offset)
}
/* Encrypt or decrypt the environment before writing or reading it. */
-static int env_aes_cbc_crypt(char *payload, const int enc)
+static int env_aes_cbc_crypt(char *payload, const int enc, uint8_t *key)
{
uint8_t *data = (uint8_t *)payload;
const int len = getenvsize();
@@ -957,7 +958,7 @@ static int env_aes_cbc_crypt(char *payload, const int enc)
uint32_t aes_blocks;
/* First we expand the key. */
- aes_expand_key(common_args.aes_key, key_exp);
+ aes_expand_key(key, key_exp);
/* Calculate the number of AES blocks to encrypt. */
aes_blocks = DIV_ROUND_UP(len, AES_KEY_LENGTH);
@@ -1186,7 +1187,8 @@ int fw_env_open(void)
crc0 = crc32 (0, (uint8_t *) environment.data, ENV_SIZE);
if (common_args.aes_flag) {
- ret = env_aes_cbc_crypt(environment.data, 0);
+ ret = env_aes_cbc_crypt(environment.data, 0,
+ common_args.aes_key);
if (ret)
return ret;
}
@@ -1243,7 +1245,8 @@ int fw_env_open(void)
crc1 = crc32 (0, (uint8_t *) redundant->data, ENV_SIZE);
if (common_args.aes_flag) {
- ret = env_aes_cbc_crypt(redundant->data, 0);
+ ret = env_aes_cbc_crypt(redundant->data, 0,
+ common_args.aes_key);
if (ret)
return ret;
}
--
2.8.0.rc3
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [U-Boot] [PATCH v2 2/5] tools/env: remove 'extern' from function prototype in fw_env.h
2016-04-19 20:43 [U-Boot] [PATCH v2 0/5] tools/env: pass arguments as parameters not global structure Andreas Fenkart
2016-04-19 20:43 ` [U-Boot] [PATCH v2 1/5] tools/env: pass key as argument to env_aes_cbc_crypt Andreas Fenkart
@ 2016-04-19 20:43 ` Andreas Fenkart
2016-05-30 17:55 ` [U-Boot] [U-Boot, v2, " Tom Rini
2016-04-19 20:43 ` [U-Boot] [PATCH v2 3/5] tools/env: fw_printenv pass value_only as argument Andreas Fenkart
2016-04-19 20:43 ` [U-Boot] [PATCH v2 4/5] tools/env: compute size of usable area only once Andreas Fenkart
3 siblings, 1 reply; 9+ messages in thread
From: Andreas Fenkart @ 2016-04-19 20:43 UTC (permalink / raw)
To: u-boot
checkpatch complains about in succeding patch. Prefer to fix all
declarations in a dedicated patch.
Signed-off-by: Andreas Fenkart <andreas.fenkart@digitalstrom.com>
---
tools/env/fw_env.h | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/tools/env/fw_env.h b/tools/env/fw_env.h
index 57149e7..7345922 100644
--- a/tools/env/fw_env.h
+++ b/tools/env/fw_env.h
@@ -78,12 +78,12 @@ extern struct setenv_args setenv_args;
int parse_aes_key(char *key, uint8_t *bin_key);
-extern int fw_printenv(int argc, char *argv[]);
-extern char *fw_getenv (char *name);
-extern int fw_setenv (int argc, char *argv[]);
-extern int fw_parse_script(char *fname);
-extern int fw_env_open(void);
-extern int fw_env_write(char *name, char *value);
-extern int fw_env_close(void);
+int fw_printenv(int argc, char *argv[]);
+char *fw_getenv(char *name);
+int fw_setenv(int argc, char *argv[]);
+int fw_parse_script(char *fname);
+int fw_env_open(void);
+int fw_env_write(char *name, char *value);
+int fw_env_close(void);
-extern unsigned long crc32 (unsigned long, const unsigned char *, unsigned);
+unsigned long crc32(unsigned long, const unsigned char *, unsigned);
--
2.8.0.rc3
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [U-Boot] [PATCH v2 3/5] tools/env: fw_printenv pass value_only as argument
2016-04-19 20:43 [U-Boot] [PATCH v2 0/5] tools/env: pass arguments as parameters not global structure Andreas Fenkart
2016-04-19 20:43 ` [U-Boot] [PATCH v2 1/5] tools/env: pass key as argument to env_aes_cbc_crypt Andreas Fenkart
2016-04-19 20:43 ` [U-Boot] [PATCH v2 2/5] tools/env: remove 'extern' from function prototype in fw_env.h Andreas Fenkart
@ 2016-04-19 20:43 ` Andreas Fenkart
2016-05-30 17:55 ` [U-Boot] [U-Boot, v2, " Tom Rini
2016-04-19 20:43 ` [U-Boot] [PATCH v2 4/5] tools/env: compute size of usable area only once Andreas Fenkart
3 siblings, 1 reply; 9+ messages in thread
From: Andreas Fenkart @ 2016-04-19 20:43 UTC (permalink / raw)
To: u-boot
Signed-off-by: Andreas Fenkart <andreas.fenkart@digitalstrom.com>
---
tools/env/fw_env.c | 6 +++---
tools/env/fw_env.h | 4 ++--
tools/env/fw_env_main.c | 4 ++--
3 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/tools/env/fw_env.c b/tools/env/fw_env.c
index e5b2e8f..1420855 100644
--- a/tools/env/fw_env.c
+++ b/tools/env/fw_env.c
@@ -239,7 +239,7 @@ int parse_aes_key(char *key, uint8_t *bin_key)
* Print the current definition of one, or more, or all
* environment variables
*/
-int fw_printenv (int argc, char *argv[])
+int fw_printenv(int argc, char *argv[], int value_only)
{
char *env, *nxt;
int i, rc = 0;
@@ -262,7 +262,7 @@ int fw_printenv (int argc, char *argv[])
return 0;
}
- if (printenv_args.name_suppress && argc != 1) {
+ if (value_only && argc != 1) {
fprintf(stderr,
"## Error: `-n' option requires exactly one argument\n");
return -1;
@@ -283,7 +283,7 @@ int fw_printenv (int argc, char *argv[])
}
val = envmatch (name, env);
if (val) {
- if (!printenv_args.name_suppress) {
+ if (!value_only) {
fputs (name, stdout);
putc ('=', stdout);
}
diff --git a/tools/env/fw_env.h b/tools/env/fw_env.h
index 7345922..d4daeea 100644
--- a/tools/env/fw_env.h
+++ b/tools/env/fw_env.h
@@ -67,7 +67,7 @@ struct common_args {
extern struct common_args common_args;
struct printenv_args {
- int name_suppress;
+ int value_only;
};
extern struct printenv_args printenv_args;
@@ -78,7 +78,7 @@ extern struct setenv_args setenv_args;
int parse_aes_key(char *key, uint8_t *bin_key);
-int fw_printenv(int argc, char *argv[]);
+int fw_printenv(int argc, char *argv[], int value_only);
char *fw_getenv(char *name);
int fw_setenv(int argc, char *argv[]);
int fw_parse_script(char *fname);
diff --git a/tools/env/fw_env_main.c b/tools/env/fw_env_main.c
index 3706d8f..2a45a0d 100644
--- a/tools/env/fw_env_main.c
+++ b/tools/env/fw_env_main.c
@@ -151,7 +151,7 @@ int parse_printenv_args(int argc, char *argv[])
EOF) {
switch (c) {
case 'n':
- printenv_args.name_suppress = 1;
+ printenv_args.value_only = 1;
break;
case 'a':
case 'c':
@@ -240,7 +240,7 @@ int main(int argc, char *argv[])
}
if (do_printenv) {
- if (fw_printenv(argc, argv) != 0)
+ if (fw_printenv(argc, argv, printenv_args.value_only))
retval = EXIT_FAILURE;
} else {
if (!setenv_args.script_file) {
--
2.8.0.rc3
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [U-Boot] [PATCH v2 4/5] tools/env: compute size of usable area only once
2016-04-19 20:43 [U-Boot] [PATCH v2 0/5] tools/env: pass arguments as parameters not global structure Andreas Fenkart
` (2 preceding siblings ...)
2016-04-19 20:43 ` [U-Boot] [PATCH v2 3/5] tools/env: fw_printenv pass value_only as argument Andreas Fenkart
@ 2016-04-19 20:43 ` Andreas Fenkart
2016-05-30 17:55 ` [U-Boot] [U-Boot, v2, " Tom Rini
3 siblings, 1 reply; 9+ messages in thread
From: Andreas Fenkart @ 2016-04-19 20:43 UTC (permalink / raw)
To: u-boot
for double buffering to work, redundant buffers must have equal size
Signed-off-by: Andreas Fenkart <andreas.fenkart@digitalstrom.com>
---
tools/env/fw_env.c | 32 ++++++++++++++++++--------------
1 file changed, 18 insertions(+), 14 deletions(-)
diff --git a/tools/env/fw_env.c b/tools/env/fw_env.c
index 1420855..15df5ad 100644
--- a/tools/env/fw_env.c
+++ b/tools/env/fw_env.c
@@ -75,7 +75,8 @@ static int dev_current;
#define CUR_ENVSIZE ENVSIZE(dev_current)
-#define ENV_SIZE getenvsize()
+static unsigned long usable_envsize;
+#define ENV_SIZE usable_envsize
struct env_image_single {
uint32_t crc; /* CRC32 over data bytes */
@@ -124,18 +125,6 @@ static int parse_config (void);
#if defined(CONFIG_FILE)
static int get_config (char *);
#endif
-static inline ulong getenvsize (void)
-{
- ulong rc = CUR_ENVSIZE - sizeof(uint32_t);
-
- if (HaveRedundEnv)
- rc -= sizeof (char);
-
- if (common_args.aes_flag)
- rc &= ~(AES_KEY_LENGTH - 1);
-
- return rc;
-}
static char *skip_chars(char *s)
{
@@ -953,7 +942,7 @@ static int flash_flag_obsolete (int dev, int fd, off_t offset)
static int env_aes_cbc_crypt(char *payload, const int enc, uint8_t *key)
{
uint8_t *data = (uint8_t *)payload;
- const int len = getenvsize();
+ const int len = usable_envsize;
uint8_t key_exp[AES_EXPAND_KEY_LENGTH];
uint32_t aes_blocks;
@@ -1379,6 +1368,21 @@ static int parse_config ()
DEVNAME (1), strerror (errno));
return -1;
}
+
+ if (HaveRedundEnv && ENVSIZE(0) != ENVSIZE(1)) {
+ ENVSIZE(0) = ENVSIZE(1) = min(ENVSIZE(0), ENVSIZE(1));
+ fprintf(stderr,
+ "Redundant environments have inequal size, set to 0x%08lx\n",
+ ENVSIZE(1));
+ }
+
+ usable_envsize = CUR_ENVSIZE - sizeof(uint32_t);
+ if (HaveRedundEnv)
+ usable_envsize -= sizeof(char);
+
+ if (common_args.aes_flag)
+ usable_envsize &= ~(AES_KEY_LENGTH - 1);
+
return 0;
}
--
2.8.0.rc3
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [U-Boot] [U-Boot, v2, 1/5] tools/env: pass key as argument to env_aes_cbc_crypt
2016-04-19 20:43 ` [U-Boot] [PATCH v2 1/5] tools/env: pass key as argument to env_aes_cbc_crypt Andreas Fenkart
@ 2016-05-30 17:55 ` Tom Rini
0 siblings, 0 replies; 9+ messages in thread
From: Tom Rini @ 2016-05-30 17:55 UTC (permalink / raw)
To: u-boot
On Tue, Apr 19, 2016 at 10:43:39PM +0200, Andreas Fenkart wrote:
> Signed-off-by: Andreas Fenkart <andreas.fenkart@digitalstrom.com>
Applied to u-boot/master, thanks!
--
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20160530/0dccdb76/attachment.sig>
^ permalink raw reply [flat|nested] 9+ messages in thread
* [U-Boot] [U-Boot, v2, 2/5] tools/env: remove 'extern' from function prototype in fw_env.h
2016-04-19 20:43 ` [U-Boot] [PATCH v2 2/5] tools/env: remove 'extern' from function prototype in fw_env.h Andreas Fenkart
@ 2016-05-30 17:55 ` Tom Rini
0 siblings, 0 replies; 9+ messages in thread
From: Tom Rini @ 2016-05-30 17:55 UTC (permalink / raw)
To: u-boot
On Tue, Apr 19, 2016 at 10:43:40PM +0200, Andreas Fenkart wrote:
> checkpatch complains about in succeding patch. Prefer to fix all
> declarations in a dedicated patch.
>
> Signed-off-by: Andreas Fenkart <andreas.fenkart@digitalstrom.com>
Applied to u-boot/master, thanks!
--
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20160530/1f30eaa5/attachment.sig>
^ permalink raw reply [flat|nested] 9+ messages in thread
* [U-Boot] [U-Boot, v2, 3/5] tools/env: fw_printenv pass value_only as argument
2016-04-19 20:43 ` [U-Boot] [PATCH v2 3/5] tools/env: fw_printenv pass value_only as argument Andreas Fenkart
@ 2016-05-30 17:55 ` Tom Rini
0 siblings, 0 replies; 9+ messages in thread
From: Tom Rini @ 2016-05-30 17:55 UTC (permalink / raw)
To: u-boot
On Tue, Apr 19, 2016 at 10:43:41PM +0200, Andreas Fenkart wrote:
> Signed-off-by: Andreas Fenkart <andreas.fenkart@digitalstrom.com>
Applied to u-boot/master, thanks!
--
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20160530/b6431c78/attachment.sig>
^ permalink raw reply [flat|nested] 9+ messages in thread
* [U-Boot] [U-Boot, v2, 4/5] tools/env: compute size of usable area only once
2016-04-19 20:43 ` [U-Boot] [PATCH v2 4/5] tools/env: compute size of usable area only once Andreas Fenkart
@ 2016-05-30 17:55 ` Tom Rini
0 siblings, 0 replies; 9+ messages in thread
From: Tom Rini @ 2016-05-30 17:55 UTC (permalink / raw)
To: u-boot
On Tue, Apr 19, 2016 at 10:43:42PM +0200, Andreas Fenkart wrote:
> for double buffering to work, redundant buffers must have equal size
>
> Signed-off-by: Andreas Fenkart <andreas.fenkart@digitalstrom.com>
Applied to u-boot/master, thanks!
--
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20160530/542e48db/attachment.sig>
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2016-05-30 17:55 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-04-19 20:43 [U-Boot] [PATCH v2 0/5] tools/env: pass arguments as parameters not global structure Andreas Fenkart
2016-04-19 20:43 ` [U-Boot] [PATCH v2 1/5] tools/env: pass key as argument to env_aes_cbc_crypt Andreas Fenkart
2016-05-30 17:55 ` [U-Boot] [U-Boot, v2, " Tom Rini
2016-04-19 20:43 ` [U-Boot] [PATCH v2 2/5] tools/env: remove 'extern' from function prototype in fw_env.h Andreas Fenkart
2016-05-30 17:55 ` [U-Boot] [U-Boot, v2, " Tom Rini
2016-04-19 20:43 ` [U-Boot] [PATCH v2 3/5] tools/env: fw_printenv pass value_only as argument Andreas Fenkart
2016-05-30 17:55 ` [U-Boot] [U-Boot, v2, " Tom Rini
2016-04-19 20:43 ` [U-Boot] [PATCH v2 4/5] tools/env: compute size of usable area only once Andreas Fenkart
2016-05-30 17:55 ` [U-Boot] [U-Boot, v2, " Tom Rini
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox