Skip to content

Commit 4cfcd41

Browse files
committed
Add command revert-tper to gosedctl
Signed-off-by: Christopher Meis <[email protected]>
1 parent fbccda9 commit 4cfcd41

File tree

2 files changed

+41
-1
lines changed

2 files changed

+41
-1
lines changed

cmd/gosedctl/cmd.go

+40
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,11 @@ type loadPBAImageCmd struct {
2727
Path string `flag:"" required:"" short:"i" help:"Path to PBA image"`
2828
}
2929

30+
type revertTPerCmd struct {
31+
Device string `flag:"" required:"" short:"d" help:"Path to SED device (e.g. /dev/nvme0)"`
32+
Password string `flag:"" required:"" short:"p"`
33+
}
34+
3035
type revertNoeraseCmd struct {
3136
Device string `flag:"" required:"" short:"d" help:"Path to SED device (e.g. /dev/nvme0)"`
3237
Password string `flag:"" required:"" short:"p"`
@@ -37,6 +42,7 @@ var cli struct {
3742
InitialSetup initialSetupCmd `cmd:"" help:"Take ownership of a given device"`
3843
LoadPBA loadPBAImageCmd `cmd:"" help:"Load PBA image to shadow MBR"`
3944
RevertNoerase revertNoeraseCmd `cmd:"" help:""`
45+
RevertTper revertTPerCmd `cmd:"" help:""`
4046
}
4147

4248
// Run executes when the initial-setup command is invoked
@@ -227,3 +233,37 @@ func (r *revertNoeraseCmd) Run(ctx *context) error {
227233
}
228234
return nil
229235
}
236+
237+
func (r *revertTPerCmd) Run(ctx *context) error {
238+
coreObj, err := core.NewCore(r.Device)
239+
if err != nil {
240+
return fmt.Errorf("NewCore(%s) failed: %v", r.Device, err)
241+
}
242+
comID, _, err := core.FindComID(coreObj.DriveIntf, coreObj.DiskInfo.Level0Discovery)
243+
if err != nil {
244+
return fmt.Errorf("FindComID() failed: %v", err)
245+
}
246+
cs, err := core.NewControlSession(coreObj.DriveIntf, coreObj.Level0Discovery, core.WithComID(comID))
247+
if err != nil {
248+
return fmt.Errorf("NewControllSession() failed: %v", err)
249+
}
250+
adminSession, err := cs.NewSession(uid.AdminSP)
251+
if err != nil {
252+
return fmt.Errorf("cs.NewSession() failed: %v", err)
253+
}
254+
serial, err := coreObj.SerialNumber()
255+
if err != nil {
256+
return fmt.Errorf("coreObj.SerialNumber() failed: %v", err)
257+
}
258+
salt := fmt.Sprintf("%-20s", serial)
259+
pwhash := pbkdf2.Key([]byte(r.Password), []byte(salt[:20]), 75000, 32, sha1.New)
260+
261+
if err := table.ThisSP_Authenticate(adminSession, uid.AuthoritySID, pwhash); err != nil {
262+
return fmt.Errorf("authenticating as AdminSP failed: %v", err)
263+
}
264+
265+
if err := table.RevertTPer(adminSession); err != nil {
266+
return fmt.Errorf("RevertTPer() failed: %v", err)
267+
}
268+
return nil
269+
}

pkg/core/table/admin.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -221,7 +221,7 @@ func Admin_SP_GetLifeCycleState(s *core.Session, spid uid.SPID) (LifeCycleState,
221221
return LifeCycleState(v), nil
222222
}
223223

224-
func RevertTPer(s *core.Session, psid bool) error {
224+
func RevertTPer(s *core.Session) error {
225225
var invoking uid.InvokingID
226226
copy(invoking[:], uid.AdminSP[:])
227227
mc := method.NewMethodCall(invoking, uid.OpalRevert, s.MethodFlags)

0 commit comments

Comments
 (0)