From voland@eagle.plab.ku.dk  Sun Dec 20 08:23:52 1998
Received: from eagle.plab.ku.dk (eagle.plab.ku.dk [130.225.105.63])
          by hub.freebsd.org (8.8.8/8.8.8) with ESMTP id IAA24557
          for <FreeBSD-gnats-submit@freebsd.org>; Sun, 20 Dec 1998 08:23:51 -0800 (PST)
          (envelope-from voland@eagle.plab.ku.dk)
Received: (from voland@localhost)
	by eagle.plab.ku.dk (8.8.8/8.8.8) id RAA16517;
	Sun, 20 Dec 1998 17:23:50 +0100 (CET)
	(envelope-from voland)
Message-Id: <199812201623.RAA16517@eagle.plab.ku.dk>
Date: Sun, 20 Dec 1998 17:23:50 +0100 (CET)
From: voland@plab.ku.dk
Reply-To: voland@plab.ku.dk
To: FreeBSD-gnats-submit@freebsd.org
Subject: acd driver inconsistency (byte order in CDIOCREADAUDIO)
X-Send-Pr-Version: 3.2

>Number:         9144
>Category:       kern
>Synopsis:       acd driver inconsistency (byte order in CDIOCREADAUDIO)
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    luigi
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Sun Dec 20 08:30:00 PST 1998
>Closed-Date:    Tue May 29 12:27:55 PDT 2001
>Last-Modified:  Tue May 29 12:28:19 PDT 2001
>Originator:     Vadim Belman
>Release:        FreeBSD 2.2.8-RELEASE i386
>Organization:
The Protein Laboratory, University of Copenhagen
>Environment:

>Description:

	There is an inconsistency in acd driver behaviour. As written
in cdio.h LBA address format uses network byte order to store the
frame number. But CDIOCREADAUDIO ioctl uses host byte order instead.

>How-To-Repeat:

#include <sys/cdio.h>
#include <sys/ioctl.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdlib.h>
#include <errno.h>
#include <stdio.h>

/* Commenting out the following line avoids the error. */
#define NETWORK_ORDER

int
main()
{
    char buf[ 2352];
    struct ioc_read_audio ira;
    int h = open( "/dev/wcd0a", O_RDONLY);
    int rc;

    ira.address_format = CD_LBA_FORMAT;
#ifdef NETWORK_ORDER
    ira.address.lba = htonl( 1);
#else
    ira.address.lba = 1;
#endif
    ira.nframes = 1;
    ira.buffer = buf;
    rc = ioctl( h, CDIOCREADAUDIO, &ira);
    if ( rc == -1) {
	perror( "CDIOCREADAUDIO");
    }
    else {
	printf( "Ok.\n");
    }

    close( h);

    return 0;
}

>Fix:
	
--- atapi-cd.c.orig     Sun Dec 20 16:53:43 1998
+++ atapi-cd.c  Sun Dec 20 16:54:13 1998
@@ -931,7 +931,7 @@
                return EINVAL;
 
            if (args->address_format == CD_LBA_FORMAT)
-               lba = args->address.lba;
+               lba = ntohl(args->address.lba);
            else if (args->address_format == CD_MSF_FORMAT)
                lba = msf2lba(args->address.msf.minute,
                             args->address.msf.second,

>Release-Note:
>Audit-Trail:
Responsible-Changed-From-To: freebsd-bugs->luigi 
Responsible-Changed-By: luigi 
Responsible-Changed-When: Sun Dec 27 03:16:39 PST 1998 
Responsible-Changed-Why:  
i will take care of this -- luigi 
State-Changed-From-To: open->closed 
State-Changed-By: sos 
State-Changed-When: Tue May 29 12:27:55 PDT 2001 
State-Changed-Why:  
Obsolete 

http://www.FreeBSD.org/cgi/query-pr.cgi?pr=9144 
>Unformatted:
