[PATCH 2/4] barebox remote control

Peter Korsgaard peter at korsgaard.com
Fri Jun 12 03:36:48 PDT 2015


>>>>> "Sascha" == Sascha Hauer <s.hauer at pengutronix.de> writes:

Hi,

 > This adds the ability to control barebox over serial lines. The regular
 > console is designed for human input and is unsuitable for controlling
 > barebox from scripts since characters can be lost on both ends, the data
 > stream contains escape sequences and the prompt cannot be easily matched
 > upon.
 > This approach is based on the RATP protocol. RATP packages start with a
 > binary 0x01 which does not occur in normal console data. Whenever a
 > 0x01 character is detected in the console barebox goes into RATP mode.
 > The RATP packets contain a simple structure with a command/respone
 > type and data for that type. Currently defined types are:


> +int barebox_ratp(struct console_device *cdev)
 > +{
 > +	void *buf = xmalloc(512);
 > +	int ret;
 > +	size_t len;
 > +	struct ratp_ctx *ctx;
 > +	struct ratp *ratp;
 > +
 > +	ctx = xzalloc(sizeof(*ctx));
 > +	ratp = &ctx->ratp;
 > +
 > +	ratp->send = ratp_send;
 > +	ratp->recv = ratp_recv;
 > +	ctx->cdev = cdev;
 > +
 > +	ret = ratp_establish(ratp, false, 0);
 > +	if (ret < 0)
 > +		return ret;
 > +
 > +	ret = ratp_console_register(ctx);
 > +	if (ret)
 > +		return ret;

You're leaking ctx and buf here (and buf below as well).

 > +
 > +	while (1) {
 > +		ret = ratp_poll(ratp);
 > +		if (ret == -EINTR)
 > +			goto out;
 > +		if (ratp_closed(ratp))
 > +			goto out;
 > +
 > +		len = 512;
 > +		ret = ratp_recv_data(ratp, buf, &len);
 > +		if (ret == -EAGAIN)
 > +			continue;
 > +
 > +		if (ret < 0)
 > +			goto out;
 > +
 > +		ret = ratp_bb_dispatch(ctx, buf, len);
 > +		if (ret)
 > +			break;
 > +	}
 > +out:
 > +
 > +	console_unregister(&ctx->ratp_console);
 > +
 > +	free(ctx);
 > +
 > +	return ret;
 > +}


> +++ b/crypto/Kconfig
 > @@ -2,6 +2,7 @@ config CRC32
 >  	bool
 
 >  config CRC16
 > +	default y

Why?

-- 
Bye, Peter Korsgaard



More information about the barebox mailing list