1
0
mirror of git://git.gnupg.org/gnupg.git synced 2025-04-17 15:44:34 +02:00

agent,scd: Make sure to set CONFIDENTIAL flag in Assuan.

* agent/call-scd.c (inq_needpin): Call assuan_begin_confidential
and assuan_end_confidential, and wipe the memory after use.
* agent/command.c (cmd_preset_passphrase): Likewise.
(cmd_put_secret): Likewise.
* scd/command.c (pin_cb): Likewise.

--

GnuPG-bug-id: 5977
Signed-off-by: NIIBE Yutaka <gniibe@fsij.org>
This commit is contained in:
NIIBE Yutaka 2022-05-25 14:53:06 +09:00
parent 8e859331ea
commit 052f58422d
3 changed files with 23 additions and 5 deletions

View File

@ -384,7 +384,12 @@ inq_needpin (void *opaque, const char *line)
rc = parm->getpin_cb (parm->getpin_cb_arg, parm->getpin_cb_desc, rc = parm->getpin_cb (parm->getpin_cb_arg, parm->getpin_cb_desc,
line, pin, pinlen); line, pin, pinlen);
if (!rc) if (!rc)
{
assuan_begin_confidential (parm->ctx);
rc = assuan_send_data (parm->ctx, pin, pinlen); rc = assuan_send_data (parm->ctx, pin, pinlen);
assuan_end_confidential (parm->ctx);
}
wipememory (pin, pinlen);
xfree (pin); xfree (pin);
} }
else if ((s = has_leading_keyword (line, "POPUPPINPADPROMPT"))) else if ((s = has_leading_keyword (line, "POPUPPINPADPROMPT")))

View File

@ -2387,7 +2387,11 @@ cmd_preset_passphrase (assuan_context_t ctx, char *line)
rc = print_assuan_status (ctx, "INQUIRE_MAXLEN", "%zu", maxlen); rc = print_assuan_status (ctx, "INQUIRE_MAXLEN", "%zu", maxlen);
if (!rc) if (!rc)
{
assuan_begin_confidential (ctx);
rc = assuan_inquire (ctx, "PASSPHRASE", &passphrase, &len, maxlen); rc = assuan_inquire (ctx, "PASSPHRASE", &passphrase, &len, maxlen);
assuan_end_confidential (ctx);
}
} }
else else
rc = set_error (GPG_ERR_NOT_IMPLEMENTED, "passphrase is required"); rc = set_error (GPG_ERR_NOT_IMPLEMENTED, "passphrase is required");
@ -2396,8 +2400,11 @@ cmd_preset_passphrase (assuan_context_t ctx, char *line)
{ {
rc = agent_put_cache (ctrl, grip_clear, CACHE_MODE_ANY, passphrase, ttl); rc = agent_put_cache (ctrl, grip_clear, CACHE_MODE_ANY, passphrase, ttl);
if (opt_inquire) if (opt_inquire)
{
wipememory (passphrase, len);
xfree (passphrase); xfree (passphrase);
} }
}
leave: leave:
return leave_cmd (ctx, rc); return leave_cmd (ctx, rc);
@ -3219,8 +3226,12 @@ cmd_put_secret (assuan_context_t ctx, char *line)
{ {
err = print_assuan_status (ctx, "INQUIRE_MAXLEN", "%u",MAXLEN_PUT_SECRET); err = print_assuan_status (ctx, "INQUIRE_MAXLEN", "%u",MAXLEN_PUT_SECRET);
if (!err) if (!err)
{
assuan_begin_confidential (ctx);
err = assuan_inquire (ctx, "SECRET", err = assuan_inquire (ctx, "SECRET",
&value, &valuelen, MAXLEN_PUT_SECRET); &value, &valuelen, MAXLEN_PUT_SECRET);
assuan_end_confidential (ctx);
}
if (err) if (err)
goto leave; goto leave;
} }

View File

@ -978,7 +978,9 @@ pin_cb (void *opaque, const char *info, char **retstr)
/* Fixme: Write an inquire function which returns the result in /* Fixme: Write an inquire function which returns the result in
secure memory and check all further handling of the PIN. */ secure memory and check all further handling of the PIN. */
assuan_begin_confidential (ctx);
rc = assuan_inquire (ctx, command, &value, &valuelen, MAXLEN_PIN); rc = assuan_inquire (ctx, command, &value, &valuelen, MAXLEN_PIN);
assuan_end_confidential (ctx);
xfree (command); xfree (command);
if (rc) if (rc)
return rc; return rc;