[openfirmware] [commit] r3706 - cpu/x86/pc/olpc
repository service
svn at openfirmware.info
Mon Nov 11 04:07:42 CET 2013
Author: quozl
Date: Mon Nov 11 04:07:41 2013
New Revision: 3706
URL: http://tracker.coreboot.org/trac/openfirmware/changeset/3706
Log:
OLPC XO-1.75 - keyjector, also handle keys that are corrupt, or wrong length, rather than stopping if all key names are present
Modified:
cpu/x86/pc/olpc/keyject.fth
Modified: cpu/x86/pc/olpc/keyject.fth
==============================================================================
--- cpu/x86/pc/olpc/keyject.fth Mon Nov 11 03:59:30 2013 (r3705)
+++ cpu/x86/pc/olpc/keyject.fth Mon Nov 11 04:07:41 2013 (r3706)
@@ -22,49 +22,86 @@
;
\ !!! Change the date for each different deployment
-: keyject-expired? ( -- flag ) " 20090401T000000Z" expired? ;
+: keyject-expired? ( -- flag ) " 20131108T000000Z" expired? ;
\ !!! Change the key list for each different deployment
: new-key-list$ ( -- ) " o1 s1 d1 w1 a1" ;
-\ True if the all the requested tags are already present.
+\ True if the requested tags are all present and all correct.
\ This prevents endless looping.
+0 value already-injected
+
+: key-differs ( name$ -- )
+ ." Key " type ." did differ." cr
+ false to already-injected
+;
+
+: key-missing ( name$ -- )
+ ." Key " type ." was missing." cr
+ false to already-injected
+;
+
+: key-unknown ( name$ -- )
+ ." Key " type ." is unknown, no dropin." cr
+ \ no action possible, needs keyjector to be recreated.
+;
+
+: key-ok ( name$ -- )
+ ." Key " type ." is okay." cr
+ \ no action desired.
+;
+
+: test-key ( name$ -- )
+ 2dup find-tag if ( name$ value$ )
+ 2over find-drop-in if ( name$ value$ existing$ )
+ $= 0= if ( name$ )
+ 2dup key-differs ( name$ )
+ else
+ 2dup key-ok
+ then ( name$ )
+ else ( name$ value$ )
+ 2drop 2dup key-unknown ( name$ )
+ then ( name$ )
+ 2drop ( )
+ else ( name$ )
+ key-missing ( )
+ then ( )
+;
+
: already-injected? ( -- flag )
- new-key-list$ begin dup while ( $ )
- bl left-parse-string ( $' name$ )
- find-tag if ( $ value$ )
- 2drop ( $ )
- else ( $ )
- 2drop false exit
- then ( $ )
- repeat ( $ )
- 2drop true
+ true to already-injected ( )
+ new-key-list$ begin dup while ( $ )
+ bl left-parse-string ( $' name$ )
+ test-key ( $ )
+ repeat ( $ )
+ 2drop ( )
+ already-injected ( flag )
;
-: inject-key ( keyname$ -- )
- 2dup find-drop-in if ( keyname$ value$ )
- 2over ram-find-tag if ( keyname$ value$ oldvalue$ )
- 2 pick <> if ( keyname$ value$ oldvalue$ )
- 3drop ( keyname$ )
- ." Warning: inconsistent old tag length for " type cr ( )
- exit
- then ( keyname$ value$ oldvalue-adr )
- >r 2tuck r> swap move ( valu$ keyname$ )
- green-letters
- ." Replaced " type cr ( value$ )
- cancel
- else ( keyname$ value$ )
- 2swap ( value$ keyname$ )
- 2over 2over ( value$ keyname$ value$ keyname$ )
- ($add-tag) ( value$ keyname$ )
- green-letters
- ." Added " type cr ( value$ )
- cancel
- then ( value$ )
- free-mem ( )
- else ( keyname$ )
- ." Warning: Can't find a dropin module for " type cr ( )
- then ( )
+: inject-key ( name$ -- )
+ 2dup find-drop-in if ( name$ value$ )
+ green-letters ( name$ value$ )
+ 2over ram-find-tag if ( name$ value$ oldvalue$ )
+ 2 pick <> if ( name$ value$ oldvalue-adr )
+ drop ( name$ value$ )
+ 2over ($delete-tag) ( name$ value$ )
+ 2over ." Deleted " type cr ( name$ value$ )
+ 2over 2over 2swap ($add-tag) ( name$ value$ )
+ 2swap ." Added " type cr ( value$ )
+ else ( name$ value$ oldvalue-adr )
+ >r 2tuck r> swap move ( value$ name$ )
+ ." Replaced " type cr ( value$ )
+ then ( value$ )
+ else ( name$ value$ )
+ 2swap ( value$ name$ )
+ 2over 2over ($add-tag) ( value$ name$ )
+ ." Added " type cr ( value$ )
+ then ( value$ )
+ cancel ( value$ )
+ free-mem ( )
+ else ( name$ )
+ ." Warning: key " type ." is not in firmware image dropins" cr ( )
+ then ( )
;
: inject-keys ( -- )
@@ -82,7 +119,7 @@
red-letters ." Not injecting because: " type cr cancel
cr
." Will update firmware in 20 seconds" cr
- d# 20,000 ms
+ d# 21 1 do i .d (cr d# 1,000 ms loop
;
: do-keyject? ( -- flag )
More information about the openfirmware
mailing list