On 10/31/14 10:24, Weiny, Ira wrote:
On 10/31/14 00:54, ira.we...@intel.com wrote:
> +int read_and_set_hostname(int fd)
> +{
> + int rc;
> + char buf[128];
> + if (read(fd, buf, 65) >= 0) {
> + buf[65] = '\0';
> + newline_to_null(buf);
> + strip_domain(buf);
> + syslog(LOG_INFO, "new hostname detected: %s", buf);
> + set_rdma_device_names((char *)buf);
> + rc = 0;
> + } else {
> + syslog(LOG_ERR, "Read %s Failed\n", SYS_HOSTNAME);
> + rc = -EIO;
> + }
> + return rc;
> +}
The above code will trigger reading uninitialized data if the data read from fd
is not newline-terminated and less than 65 characters are read.
I'm not sure what you mean. Do you mean "will trigger _using_ uninitialized
data"?
Yes.
How about the following?
@@ -155,8 +156,8 @@ int read_and_set_hostname(int fd)
{
int rc;
char buf[128];
- if (read(fd, buf, 65) >= 0) {
- buf[65] = '\0';
+ memset(buf, 0, sizeof(buf));
+ if (read(fd, buf, 64) >= 0) {
newline_to_null(buf);
strip_domain(buf);
syslog(LOG_INFO, "new hostname detected: %s", buf);
This change looks fine to me. A possible alternative is to use dup() +
fdopen() + fgets() + fclose(). fgets() namely automatically appends a
terminating '\0'.
Bart.
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majord...@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html