Utah let an early 14-point lead slip away, but the Utes were still within three early in the final period. Barkley, however, hit Marqise Lee with an 83-yard touchdown pass with 12:10 remaining to give USC a 31-21 advantage.
Nickell Robey then broke things open for the Trojans by returning an interception 38 yards for a score with 9:30 to go. That gave USC enough of a cushion to survive a 5-yard touchdown run by Utah's Kelvin York with 38 seconds left at the end of a 63-yard drive.
USC improved to 4-1 and is 2-1 in the Pac-12 Conference South. Utah slipped to 2-3 and is 0-2 in the division.
Utah quarterback Jon Hays hit DeVonte Christopher with an 18-yard touchdown midway through the second period to give the Utes a 21-10 lead, but before the half was over Barkley had thrown for two scores.
Barkley, who has a 31-10 record as a four-year starter at USC, found Randal Telfer with a 23-yard scoring toss and hit Robert Woods with another one of 6 yards to put the Trojans in front for the first time with 4:38 to go in the second period.
Barkley completed 23-of-30 for 302 yards without an interception. Lee caught 12 passes for 191 yards. Hays was good on 19-of-32 for 165 yards and two scores.
Utah produced two touchdowns in a span of 2 minutes in the first period to take the early lead, the first score coming when Nate Fakahafua returned a fumble by Bradley eight yards to the end zone.