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

Reply via email to