Detectives Mike Parnell and Danny Scaliese are two crooked cops who specialise in making drug busts. Rather than completing the busts properly and handing over all the drugs as evidence, they always steal a portion for their own use.
After taking a cocaine hit and being unable to concentrate properly, Parnell takes down the address incorrectly for his next drug bust. Instead, they break into Jimmie Rainwood's home, expecting to find drugs. When Rainwood walks out of the bathroom with a hair dryer (that's silver in color and resembles a pistol) in hand, Parnell shoots him, thinking it's a weapon. In order to cover up their mistake, they frame Rainwood by planting drugs throughout his house and putting a firearm in his hand. With false evidence stacked up against him (and a previous marijuana charge during his college years) and his only defense being his word against two cops, he receives a 6 year prison sentence.
Rainwood is less than well versed to the horrors of prison life, something demonstrated well when he first witnesses a man get stabbed with a screwdriver and set on fire. Not long after his arrival, a vicious prisoner named Jingles and his gang take an interest in Rainwood. After getting savagely beaten by Jingles and his gang, Rainwood comes to realize that all the rumblings about having to "take care of his problem" is his only recourse.
With the help of a benevolent and influential convict named Virgil Cane (F. Murray Abraham), a plexiglas shank is fashioned for Rainwood. He stabs Jingles to death, and ends up spending three months in a windowless, subterranean solitary confinement, though the guards are unable to prove Rainwood did the job.
Upon his release back to general lockup, Rainwood is received as a minor hero. Upon getting paroled after three years, he sets out to seek revenge on the detectives who framed him. Malcolm (M.C. Gainey), another ex-con Rainwood befriended on the inside, assists Rainwood in his cause, along with Rainwood's wife Kate (Laila Robins), who learns of Scalise and Parnell's involvement in the cover-up when they begin to harass her. An internal affairs detective, John Fitzgerald, becomes involved after Kate tells him about a racist remark Parnell made (falsely) about Fitzgerald and his department. Parnell makes the mistake of telling off Fitzgerald after being confronted about the Rainwood case, making Kate's lie seem more truthful.
The harassment of the Rainwoods escalates as they get closer to the truth. The movie's climax is a showdown and shootout that leaves Scalise dead after crashing his car and Parnell about to die at the hands of Rainwood. As Rainwood is about to kill Parnell, Kate speaks up. Rainwood throws Parnell to the ground, leaving him to his soon-to-be-former colleagues.
The movie ends with Parnell in the general prison population (a creative liberty, as convicted cops are generally kept in protective custody), and spotted from a distance by Virgil, who openly addresses him as "Officer", drawing the attention of the other inmates.
Parnell looks up to the balcony where Virgil is standing, his face frozen in a mask of fear. "Ain't life a motherfucker?" Virgil asks, repeating a line he stated when he and Rainwood said their goodbyes earlier.
Jimmy ends up getting his old job back as a airline mechanic.